※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

ピップの行動は打撃攻撃のみ載せる。他の行動は、アイテムを使う処理にすべて書いてあるので、そちらを参照されたい。

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

  • 敵が複数の場合は、どの敵を選ぶか自動で選ぶ。
  • 召還悪魔フレッドがこちらに加勢した場合、ピップの後、敵1の前に攻撃させるようにする。
  • 魔法の効果やステータス変化たくさんありすぎ
// ピップが行動可能か調べ、ユーザーにピップの行動ボタンをクリックするよう促す
combat.Pip_select = function (){
    // ターン数の計算
    if (Pip.first_strike === true) {
        combat.turn_num++;
    }

    //add_msg("combat.Pip_select()に入った。");
    if (Pip.LIFE_POINT <= 0) {
        add_msg("ピップは死んでいる。。。");
        combat.Pip2enemy_turn();
    } else if (Pip.LIFE_POINT <= 5) {
        add_msg("ピップは気絶している。。。");
        combat.do_next = "enemy0_select";
        combat.Pip2enemy_turn();
    } else {
        add_msg("ピップはどうする? 「殴る」などの行動ボタンをクリックせよ。");
        //combat.do_next = "Pip_do";
    }
    if (Pip.bone_pain === true) {
        add_msg("夢時間で自分の骨をバラバラにしたので、敵に与えるダメージが半減している。");
    }

    if (Pip.yoga > 0) {
        add_msg("ヨガで関節が痛み、、敵に与える被害点が2点マイナスされる。");
    }
}
// 「殴る」をクリック
function click_punch() {
    Pip.attack_base = 6;
    Pip.extra_damage = 0;
    Pip.attack_way = "素手";

    dice.start(2,"combat.Pip_strike()");
}
// 戦利品アイテムを使用
function click_event(i) {
 // 略
}
// マーリンの隠れ家2の装備品アイテムを使用
function click_equip(i) {
 // 略
}
// マーリンの隠れ家3の魔法の品アイテムを使用
function click_magic(i) {
 // 略
}
// ピップや味方フレッドが攻撃する敵の対象を自動で選ぶ
combat.find_Pip2enemy_target = function () {	//find target
    var i = 0;
    var found_target = -1;
    for (i = 0; i < enemy.length; i++) {
        if (found_target === -1 && enemy[i].LIFE_POINT > 5 && enemy[i].Friendly_Reaction === false && enemy[i].Bribery === false) {
            found_target = i;
        }
    }

    if (found_target === -1) {
        for (i = 0; i < enemy.length; i++) {
            if (found_target === -1 && enemy[i].LIFE_POINT > 0 && enemy[i].Friendly_Reaction === false && enemy[i].Bribery === false) {
            found_target = i;
            }
        }
    }

    if (found_target === -1) {
        add_msg("敵が見つからない?");
    }

    //add_msg("ピップが狙う標的は" + enemy[found_target].name + found_target);
    return found_target;
}
// ピップが素手や剣などの打撃攻撃時の被害点計算 
combat.Pip_strike = function () {
    //add_msg("pip_strikeに入った。");
    var i = combat.find_Pip2enemy_target();

    if (Section.num === "82") { // 見えない敵
        Pip.attack_base = Math.max(Pip.attack_base, 5);
    } else if (Section.num === "171") { // ワニガエル獣
        Pip.attack_base = Math.max(Pip.attack_base, 5);
    }

    var attack_point = Math.max(dice.dice12pip - Pip.attack_base, 0) + Pip.extra_damage;
    var damage_point = attack_point - enemy[i].defence;

    add_msg("ピップは" + Pip.attack_way + "で" + enemy[i].name + "を攻撃。");

    if (Pip.bone_pain === true) {
        add_msg("夢時間で自分の骨をバラバラにしたので、敵に与えるダメージが半減している。");
        damage_point = Math.floor(damage_point / 2);
    }

    if (Pip.yoga > 0) {
        add_msg("ヨガで関節が痛み、敵に与える被害点が2点マイナスされる。");
        damage_point -= 2;
    }

    if (Pip.Lucky_Coin > 0) {
        add_msg("幸運の金貨で、敵に与える被害点が2点プラスされる。");
        damage_point += 2;
    }

    if (Pip.attack_way === "即死剣" && dice.dice12pip >= 11) {
        add_msg("即死剣で" + enemy[i].name + "は即死した!");
        enemy[i].LIFE_POINT = 0;
        update_status();
    } else if (dice.dice12pip - Pip.attack_base <= 0) {
        add_msg("空振り!");
    } else if (damage_point <= 0) {
        add_msg("ミス! " + enemy[i].name + "に攻撃が通らない。");
    } else {
        if (EJ.pudding > 0) {
            add_msg("E・Jがプリンになっているので与える被害点は2点になってしまう。");
            damage_point = 2;
        }

        if (Pip.Lucky_Coin > 0) {
            Pip.Lucky_Coin--;
            if (Pip.Lucky_Coin > 0) {
                add_msg("幸運の金貨の効果は残り" + Pip.Lucky_Coin + "回。");
            } else {
                add_msg("幸運の金貨の効果が切れた。");
                data_magic[9].label = "使う";
            }
        }

        enemy[i].LIFE_POINT -= damage_point;
        add_msg("ピップは" + enemy[i].name + "に" + damage_point + "点の被害点を与えた。");

        if (Section.num === "131") {
            combat.round++;
            add_msg("きみが一撃を与えてラウンド" + combat.round + "が終了した。");
        }
        if (Section.num === "146") {
            combat.round++;
            add_msg("きみが一撃を与えてラウンド" + combat.round + "が終了した。");
        }
        update_status();
    }
    combat.Pip2enemy_turn();
}
// 味方フレッドが行動できるか判定
combat.Fred_select = function () {
    //add_msg("combat.Fred_select()に入った。");
    if (Fred.sumon === false) {
        //add_msg("フレッドは味方についていない。");
        combat.enemy_select(0);
    } else if (Fred.LIFE_POINT <= 0) {
        add_msg("フレッドは死んでいる。");
        combat.enemy_select(0);
    } else if (Fred.LIFE_POINT <= 5) {
        add_msg("フレッドは気絶している。");
        combat.enemy_select(0);
    } else {
        var i = combat.find_Pip2enemy_target();
        add_msg("フレッドは" + Fred.attack_way + "で" + enemy[i].name + "を攻撃。");
        dice.start(2, "combat.Fred_do()");
    }
}
// 味方フレッドの攻撃
combat.Fred_do = function () {
    var i = combat.find_Pip2enemy_target();

    if (Section.num === "82") { // 見えない敵
        Fred.attack_base = Math.max(Fred.attack_base, 5);
    } else if (Section.num === "171") { // ワニガエル獣
        Fred.attack_base = Math.max(Pip.attack_base, 5);
    }

    var attack_point = Math.max(dice.dice12pip - Fred.attack_base, 0) + Fred.extra_damage;
    var damage_point = attack_point - enemy[i].defence;

    //add_msg("dice.dice12pip = " + dice.dice12pip );
    //add_msg("Fred.attack_base = " + Fred.attack_base );
    //add_msg("Fred.extra_damage = " + Fred.extra_damage );
    //add_msg("attack_point = " + attack_point );
    //add_msg("enemy[i].defence = " + enemy[i].defence );
    //add_msg("damage_point = " + damage_point );

    if (dice.dice12pip - Fred.attack_base <= 0) {
        add_msg("空振り!");
    } else if (damage_point <= 0) {
        add_msg("ミス! " + enemy[i].name + "に攻撃が通らない。");
    } else {
        enemy[i].LIFE_POINT -= damage_point;
        add_msg("フレッドは" + enemy[i].name + "に" + damage_point + "点の被害点を与えた。");
        update_status();
        if (Section.num === "131") {
            combat.round++;
            add_msg("フレッドが一撃を与えてラウンド" + combat.round + "が終了した。");
        }
        if (Section.num === "146") {
            combat.round++;
            add_msg("フレッドが一撃を与えてラウンド" + combat.round + "が終了した。");
        }
    }
    Fred.done = true;
    combat.enemy_select(0);
}
// 戦闘を続行して敵にターンを渡すかどうか判断 
combat.Pip2enemy_turn = function () {
    var i;
    var max_enemy_LIFE_POINT = 0;
    for (i = 0; i < enemy.length; i++) {
        if (enemy[i].Friendly_Reaction === true || enemy[i].Bribery === true) {
            // 友好的またはワイロで買収された敵はカウントしない
        } else {
            max_enemy_LIFE_POINT = Math.max(max_enemy_LIFE_POINT, enemy[i].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[Pip_magic[i].id_num].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 (Pip.Boots_of_Speed === 1) {
            add_msg("スピードアップ靴のお陰でもう1回続けて行動できる。");
            Pip.Boots_of_Speed = 2;
            combat.Pip_select();
        } else if (Pip.Boots_of_Speed === 2) {
            add_msg("スピードアップ靴の2回目の行動が終わった。");
            Pip.Boots_of_Speed = 1;
            combat.Fred_select();
        } else {
            combat.Fred_select();
        }
    }
}