「JavaScriptで、アイテムを使って効果発揮」の編集履歴(バックアップ)一覧に戻る

JavaScriptで、アイテムを使って効果発揮 - (2012/04/03 (火) 17:08:47) のソース

所持品のボタンをクリックしたときの処理。まず、ボタンは上から
click_event(0)、click_event(1)、click_event(2)、click_event(3)、click_event(4)、click_event(5)、click_event(6)、
と並んでいるが、この数字はデータベースのid番号ではない。
クリックされたボタンはどの所持品のid番号に当たるかはPip_event[i].id_numなので、これでswitch分岐を入れる。
サイコロを振る必要のないものは、このswitch分岐内に処理を全部書ききってしまう。

 // 戦利品のボタンをクリック
 function click_event(i) {
    var j,k;
    switch (Pip_event[i].id_num) {
        case 0: // do nothing
            break;
        case 1: // E・J

            if (combat.onCombat === false) {
                add_msg("まだ戦闘開始になっていない。");
            } else if (EJ.refuse > 0) {
                add_msg("E・Jは即死剣に嫉妬して参戦を拒否している。");
            } else {
                add_msg("ピップはE・Jで敵に斬りかかった。");
                Pip.attack_base = 3;
                Pip.extra_damage = 5;
                Pip.attack_way = "E・J";
                dice.start(2,"combat.Pip_strike()");
            }
            break;
        case 2: // 首に刺さったボルト
            add_msg("首に刺さったボルトが電気を帯びた。");
            Pip.bolt_charge = true;
            data_event[2].label = "帯電中";
            updata_state();
            break;
        case 3: // 眠り玉
            // add_msg("眠り玉をクリックした。"); // デバッグ表示用
            if (combat.onCombat === false) {
                add_msg("眠り玉は戦闘中に使うものだ。");
            } else if (Pip_event[i].num <= 0) {
                add_msg("眠り玉はもう残っていない");
            } else {
                add_msg("眠り玉を割ると催眠ガスが出てきた。");
                lose_event("眠り玉", 1);
                k = 12;
                while (k > 0) {
                    for (j = 0; j < enemy.length; j++) {
                        if (enemy[j].LIFE_POINT > 0 && k > 0) {
                            enemy[j].sleep_globe += 1;
                            k--;
                        }
                    }
                }
                for (j = 0; j < enemy.length; j++) {
                    if (enemy[j].sleep_globe > 0) {
                        add_msg(enemy[j].name + "は" + enemy[j].sleep_globe + "回の攻撃分眠るだろう。")
                    }
                }
                combat.Pip2enemy_turn();
            }
            break;
        case 4: // ノコギリ草
            add_msg("ノコギリ草をむしゃむしゃ食べた。");
            Pip.scorpion_poison = false;
            break;
        case 5: // 羊皮紙
            add_msg("巨人が踊っているような絵だ。");
            break;
        case 6: // 金貨
            add_msg("金貨をクリックした。");
            break;
        case 7: // 治療薬
            if (Pip_event[i].num <= 0) {
                add_msg("治療薬はもう残っていない。");
            } else {
                add_msg("治療薬を飲む。サイコロを2個振れ。");
                dice.start(2, "use_Healing_Potion()");
            }
            break;
        case 8: // 通行許可硬貨
            add_msg("使うべきところで使おう。");
            break;
        case 9: // サクラの花
            add_msg("サクラの花をクリックした。");
            break;
        case 10: //楕円のメダル
            add_msg("楕円のメダルをクリックした。");
            break;
        case 11: //警告球
            add_msg("警告球をクリックした。");
            break;
        case 12: //ハチミツ
            if (Pip_event[i].num <= 0) {
                add_msg("ハチミツはもう残っていない。");
            } else {
                add_msg("ハチミツを飲む。サイコロを2個振れ。");
                dice.start(2, "use_honey()");
            }
            break;
        case 13: //稲妻の矢
            if (combat.onCombat === false) {
                add_msg("稲妻の矢は戦闘中に使え。");
            } else if (Pip_event[i].num <= 0) {
                add_msg("稲妻の矢はもう残っていない。");
            } else {
                add_msg("稲妻の矢を放つ。サイコロを2個振れ。");
                dice.start(2, "combat.Pip_Thunderbolt()");
            }
          break;
        case 14: //魔法のラッパ
            if (combat.onCombat === false) {
                add_msg("魔法のラッパは戦闘中に使え。");
            } else if (Pip_event[i].num <= 0) {
                add_msg("魔法のラッパはもう残っていない。");
            } else {
                add_msg("魔法のラッパを放つ。サイコロを2個振れ。");
                dice.start(2, "combat.Pip_Kangling()");
            }
            break;
        case 15: //ドラゴン・ファイア錠
            if (combat.onCombat === false) {
                add_msg("ドラゴン・ファイア錠は戦闘中に使え。");
            } else if (Pip_event[i].num <= 0) {
                add_msg("ドラゴン・ファイア錠はもう残っていない。");
            } else {
                add_msg("ピップはドラゴン・ファイア錠を飲んで火を噴いた!");
                j = combat.find_Pip2enemy_target();
                enemy[j].LIFE_POINT -= 35;
                add_msg(enemy[j].name + "は35点の被害点を被った。");
                combat.Pip2enemy_turn();
            }
            break;
        case 16: //ブロンの歯
            add_msg("ブロンの歯をクリックした。");
            break;
        case 17: //ルビー
            add_msg("ルビーをクリックした。");
            break;
        case 18: //象牙の杖
            add_msg("象牙の杖をクリックした。");
            break;
        case 19: //音楽堂のチケット
            add_msg("音楽堂のチケットをクリックした。");
            break;
        case 20: //博物館のチケット
            add_msg("博物館のチケットをクリックした。");
            break;
        case 21: //八角形の銅貨
            add_msg("八角形の銅貨をクリックした。");
            break;
        case 22: //八角形の合金の硬貨
            add_msg("八角形の合金の硬貨をクリックした。");
            break;
        case 23: //エクスカリバー
            add_msg("ピップはエクスカリバーで敵に斬りかかった。");
            if (combat.onCombat === false) {
                add_msg("まだ戦闘開始になっていない。");
            } else {
                Pip.attack_base = 3;
                Pip.extra_damage = 10;
                Pip.attack_way = "エクスカリバー";
                dice.start(2,"combat.Pip_strike()");
            }
            break;
    }
 }

 // マーリンの隠れ家2の装備品のボタンをクリック
 function click_equip(i) {
    switch (Pip_equip[i].id_num) {
        case 0: // do nothing
            break;
        case 1: // 斧
            add_msg("斧をクリックした。");
            break;
        case 2: // 包帯
            add_msg("包帯をクリックした。");
            break;
        case 3: // 長靴
            add_msg("長靴をクリックした。");
            break;
        case 4: // つけ髭
            if (Pip_equip[i].num <= 0) {
                add_msg("つけ髭を持っていない。");
            } else if (data_equip[4].label === "つける") {
                add_msg("つけ髭をつけた。");
                data_equip[4].label = "はずす";
            } else {
                add_msg("つけ髭をはずした。");
                data_equip[4].label = "つける";
            }
            update_status();
            break;
        case 5: // ハンマー
            add_msg("ハンマーをクリックした。");
            break;
        case 6: // ハープ
            add_msg("ハープをクリックした。");
            break;
        case 7: // ランタン
            add_msg("ランタンをクリックした。");
            break;
        case 8: // ギター
            add_msg("ギターをクリックした。");
            break;
        case 9: // 木槌
            add_msg("木槌をクリックした。");
            break;
        case 10: //大釘
            add_msg("大釘をクリックした。");
            break;
        case 11: //三つの小笛
            add_msg("三つの小笛をクリックした。");
            break;
        case 12: //軟膏
            if (Pip_equip[i].num <= 0) {
                add_msg("軟膏はもう残っていない。");
            } else {
                add_msg("軟膏を塗りこんだ。生命点が3点回復した。");
                lose_equip("軟膏", 1);
                Pip.LIFE_POINT = Math.min(Pip.LIFE_POINT + 3, Pip.max_LIFE_POINT);
                update_status();
            }
            break;
        case 13: //カボチャ
            add_msg("カボチャをクリックした。");
            break;
        case 14: //水晶板
            add_msg("水晶板をクリックした。");
            break;
        case 15: //羽根ペン
            add_msg("羽根ペンをクリックした。");
            break;
        case 16: //食料
            add_msg("食料をクリックした。");
            break;
        case 17: //ロープ
            add_msg("ロープをクリックした。");
            break;
        case 18: //袋詰めの穀物
            add_msg("袋詰めの穀物をクリックした。");
            break;
        case 19: //サンダル
            add_msg("サンダルをクリックした。");
            break;
        case 20: //ノコギリ
            add_msg("ノコギリをクリックした。");
            break;
        case 21: //羊皮の胴着
            add_msg("羊皮の胴着をクリックした。");
            break;
        case 22: //ほくち箱
            add_msg("ほくち箱をクリックした。");
            break;
        case 23: //水袋
            add_msg("水袋をクリックした。");
            break;
        case 24: //バネつき靴
            add_msg("バネつき靴をクリックした。");
            break;
    }
 }

   // マーリンの隠れ家3の魔法の品のボタンをクリック
 function click_magic(i) {
    var j,k;
    var decode1, decode2;
    switch (Pip_magic[i].id_num) {
        case 0: // do nothing
            break;
        case 1: // 魔法の削り骨
            if (combat.onCombat === false) {
                add_msg("魔法の削り骨は戦闘中に使え。");
            } else if (Pip_magic[i].num <= 0) {
                add_msg("魔法の削り骨はもう残っていない。");
            } else {
                add_msg("ピップは魔法の削り骨を削った。");
                j = combat.find_Pip2enemy_target();
                lose_magic("魔法の削り骨", 1);
                Pip.LIFE_POINT -= 5;
                enemy[j].LIFE_POINT = 0;
                add_msg("生命点5点を費やして" + enemy[j].name + "を即死させた!");
                combat.Pip2enemy_turn();
            }
            break;
        case 2: // 首に刺さったボルト
            add_msg("首に刺さったボルトが電気を帯びた。");
            Pip.bolt_charge = true;
            data_magic[2].label = "帯電中";
            break;
        case 3: // スピードアップ靴
                if (Pip_magic[i].num <= 0) {
                    add_msg("もうスピードアップ靴は残っていない。");
                } else if (Pip.Boots_of_Speed > 0) {
                    add_msg("もうスピードアップ靴を履いている!");
                } else {
                    Pip.Boots_of_Speed = 1;
                    lose_magic("スピードアップ靴", 1);
                    add_msg("戦闘中に2回連続行動できるようになった。");
                    data_magic[Pip_magic[i].id_num].label = "発動中";
                }
            break;
        case 4: // 悪魔を呼ぶ死の鐘
            if (Pip_magic[i].num <= 0) {
                add_msg("悪魔を呼ぶ死の鐘はもう残っていない。");
            } else {
                add_msg("悪魔を呼ぶ死の鐘を放つ。サイコロを1個振れ。");
                dice.start(1, "sumonFred()");
            }
            break;
        case 5: // エジプトの死仮面
            if (combat.onCombat === false) {
                add_msg("エジプトの死仮面は戦闘中に使え。");
            } else if (Pip_magic[i].num <= 0) {
                add_msg("エジプトの死仮面はもう残っていない。");
            } else {
                add_msg("ピップはエジプトの死仮面を顔につけて、闘いを避けた。");
                lose_magic("エジプトの死仮面", 1);
                Pip.LIFE_POINT--;
                combat.reset();
            }
            break;
        case 6: // 太陽神の目
            if (combat.onCombat === false) {
                add_msg("太陽神の目は戦闘中に使え。");
            } else if (Pip_magic[i].num <= 0) {
                add_msg("太陽神の目はもう残っていない。");
            } else {
                add_msg("ピップは生命点を10点を費やして、太陽神の目を使った!");
                lose_magic("太陽神の目", 1);
                Pip.LIFE_POINT -= 10;
                for (j = 0; j < enemy.length ; j++){
                    if (enemy[j].LIFE_POINT > 0){
                        enemy.Eye_of_Horus = 6;
                        add_msg(enemy[j].name + "は催眠状態になった。");
                    }
                }
                combat.Pip2enemy_turn();
            }
            break;
        case 7: // 笑い球
            if (combat.onCombat === false) {
                add_msg("笑い球は戦闘中に使うものだ。");
            } else if (Pip_magic[i].num <= 0) {
                add_msg("笑い球はもう残っていない");
            } else {
                add_msg("笑い球を投げつけると粉々になり、ガスが発生した。");
                lose_event("笑い球", 1);
                k = 3;
                for (j = 0; j < enemy.length; j++) {
                    if (enemy[j].LIFE_POINT >= 5 && k > 0) {
                        enemy[j].Laughing_Globe = 3;
                        k--;
                        add_msg(enemy[j].name + "を笑い狂わせた!")
                    }
                }
                combat.Pip2enemy_turn();
            }
            break;
        case 8: // 稲妻の杖
            if (combat.onCombat === false) {
                add_msg("稲妻の杖は戦闘中に使うものだ。");
            } else if (Pip_magic[i].num <= 0) {
                add_msg("稲妻の杖はもう残っていない。");
            } else {
                add_msg("稲妻の杖を放った。サイコロを2個振れ。");
                dice.start(2, "combat.Pip_LightningWand();");
            }
            break;
        case 9: // 幸運の金貨
            if (Pip_magic[i].num <= 0) {
                add_msg("もう幸運の金貨は残っていない。");
            } else if (Pip.Boots_of_Speed > 0) {
                add_msg("もう幸運の金貨を使っている!");
            } else {
                Pip.Lucky_Coin = 3;
                add_msg("戦闘中に3回攻撃だけ被害点を2追加される。");
                data_magic[Pip_magic[i].id_num].label = "発動中";
                lose_magic("幸運の金貨", 1);
            }
            break;
        case 10: // 火の玉
            if (combat.onCombat === false) {
                add_msg("火の玉は戦闘中に使うものだ。");
            } else if (Pip_magic[i].num <= 0) {
                add_msg("火の玉はもう残っていない。");
            } else {
                add_msg("火の玉を放った。サイコロを2個振れ。");
                dice.start(2, "combat.Pip_Fireball()");
            }
            break;
        case 11: // 友好の仮面
            if (combat.onCombat === true) {
                add_msg("友好の仮面は敵に会ってからは無効だ。");
            } else if (Pip_magic[i].num <= 0) {
                add_msg("友好の仮面はもう残っていない。");
            } else if (Pip.Mask_of_Friendship_nextSection === true){
                add_msg("既に友好の仮面は次セクションに有効だ。");
            } else {
                Pip.Mask_of_Friendship_nextSection = true;
                add_msg("友好の仮面をつけた。次セクションで有効になる。");
                data_magic[Pip_magic[i].id_num].label = "次発動";
                lose_magic("友好の仮面", 1);
            }
            break;
        case 12: //破壊球
            if (combat.onCombat === false) {
                add_msg("破壊球は戦闘中に使うものだ。");
            } else if (Pip_magic[i].num <= 0) {
                add_msg("破壊球は(幸運にも)もう残っていない。");
            } else {
                add_msg("破壊球を使った。サイコロを1個振れ。");
                dice.start(1, "combat.Pip_Orb_of_Incredible_Destruction()");
            }
            break;
        case 13: //脳波兜
            if (combat.onCombat === false) {
                add_msg("脳波兜は戦闘中に使え。");
            } else if (Pip_magic[i].num <= 0) {
                add_msg("脳波兜はもう残っていない。");
            } else {
                add_msg("ピップは脳波兜をかぶった。");
                lose_magic("脳波兜", 1);
                for (j = 0; j < enemy.length ; j++){
                    if (enemy[j].LIFE_POINT > 0){
                        enemy[j].Psionic_Helm_Stop = 7;
                        enemy[j].Psionic_Helm_Half = true;
                        add_msg(enemy[j].name + "は強力な頭脳エネルギーにより衰弱した。");
                    }
                }
                combat.Pip2enemy_turn();
            }
            break;
        case 14: //虹の泡のパイプ
            add_msg("虹の泡のパイプをクリックした。");
            break;
        case 15: //復活の杖
            if (combat.onCombat === true) {
                add_msg("復活の杖は闘いの前に使え。");
            } else if (Pip_magic[i].num <= 0) {
                add_msg("復活の杖はもう残っていない。");
            } else if (Pip.Resurrection_Wand === true){
                add_msg("復活の杖で14行きを避けた! ピップの生命点が完全回復した!");
                Pip.Resurrection_Wand = false;
                Pip.LIFE_POINT = Pip.max_LIFE_POINT;
                data_magic[15].label = "使う";
            } else {
                add_msg("復活の杖を使ってみる。サイコロを2個振れ。");
                dice.start(2, "use_Resurrection_Wand()");
            }
            break;
        case 16: //泡渦巻き
            if (Pip_magic[i].num <= 0) {
                add_msg("もう泡渦巻きは残っていない。");
            } else if (Pip.impermeable_bubble > 0) {
                add_msg("まだ泡渦巻きの効果は残っている。");
            } else {
                Pip.impermeable_bubble = 2;
                add_msg("2回だけ敵からの被害点をはねとばせる。");
                data_magic[Pip_magic[i].id_num].label = "発動中";
                lose_magic("泡渦巻き", 1);
            }
            break;
        case 17: //投げ針
            if (Pip_magic[i].num <= 0) {
                add_msg("もう投げ針は残っていない。");
            } else {

                decode1 = prompt("敵の名前は?","");
                decode2 = prompt("敵のいるセクション番号は?","");
                for (j = 0; j < enemy_data.length; j++) {
                    if (decode1 === enemy_data[j].name) {
                        if (decode2 === enemy_data[j].Section) {
                            if (combat.onCombat === true) {
                                if (decode2 === "Fred") {
                                    enemy[enemy.length].LIFE_POINT = Math.max(enemy[enemy.length].LIFE_POINT / 2);
                                    add_msg("フレッドの生命点を半減させた。");
                                } else {
                                    enemy[enemy_party.num-1].LIFE_POINT = Math.max(enemy[enemy_party.num-1].LIFE_POINT / 2);
                                    add_msg(enemy[enemy_party.num-1].name + "の生命点を半減させた。");
                                }
                                update_status();
                            } else { // 移動中
                                Pip.Seeker_Needle_enemy_name = decode1;
                                add_msg(Pip.Seeker_Needle_enemy_name + "の生命点を半減させた。");
                            }
                        } //decode2一致
                    } // decode1一致
                } // enemy_dataを検索
            }
            break;
        case 18: //眠り玉
            // add_msg("眠り玉をクリックした。"); // デバッグ表示用
            if (combat.onCombat === false) {
                add_msg("眠り玉は戦闘中に使うものだ。");
            } else if (Pip_magic[i].num <= 0) {
                add_msg("眠り玉はもう残っていない");
            } else {
                add_msg("眠り玉を投げつけると粉々になって、もくもくとガスが発生した。");
                lose_magic("眠り玉", 1);
                k = 3;
                while (k > 0) {
                    for (j = 0; j < enemy.length; j++) {
                        if (enemy[j].LIFE_POINT > 0 && k > 0) {
                            enemy[j].sleep_globe += 1;
                            k--;
                        }
                    }
                }
                for (j = 0; j < enemy.length; j++) {
                    if (enemy[j].sleep_globe > 0) {
                        add_msg(enemy[j].name + "は" + enemy[j].sleep_globe + "回の攻撃分眠るだろう。")
                    }
                }
                combat.Pip2enemy_turn();
            }
            break;
        case 19: //友好オイル
            if (combat.onCombat === true) {
                add_msg("友好オイルは戦闘がはじまってからは使えない。");
            } else if (Pip_magic[i].num <= 0) {
                add_msg("友好オイルはもう残っていない。");
            } else if (enemy[i].max_LIFE_POINT > 0) {
                add_msg("友好オイルを身体に塗りつけて、闘いを避けた。");
                lose_magic("友好オイル", 1);
                combat.reset();
            } else {
                add_msg("友好オイルを身体に塗りつけた。次の友好反応で効果を発揮する。");
                Pip.Smarm_Oil = true;
                data_magic[19].label = "発動中";
                lose_magic("友好オイル", 1);
            }
            break;
        case 20: //即死剣
            if (combat.onCombat === false) {
                add_msg("即死剣は戦闘中に使え。");
            } else {
                Pip.attack_base = 6;
                Pip.extra_damage = 0;
                Pip.attack_way = "即死剣";
                EJ.refuse = 3;
                dice.start(2, "combat.Pip_strike()");
            }
            break;
    }
}

使用にサイコロを振る必要がものがあるものは、続きの関数を用意する。
いまから思えば、Section.ctrl()関数のように区切ってswitch関数の中に放り込んで処理した方が良かったかな。

 // 稲妻の矢のサイコロ後
 combat.Pip_Thunderbolt = function () {
     add_msg("ピップは稲妻の矢を放った!");
     lose_event("稲妻の矢", 1);
     if (dice.dice12pip >= 6) {
     var i = combat.find_Pip2enemy_target();
     enemy[i].LIFE_POINT = Math.floor(enemy[i].LIFE_POINT/ 2);
         add_msg("命中! " + enemy[i].name + "の生命点を半減させた。");
     } else {
         add_msg("稲妻の矢は外れてしまった。");
     }
     combat.Pip2enemy_turn();
 }

 // 魔法のラッパのサイコロ後
 combat.Pip_Kangling = function () {
     add_msg("ピップは魔法のラッパを試みた!");
     lose_event("魔法のラッパ", 1);
     if (dice.dice12pip >= 6) {
         var i = combat.find_Pip2enemy_target();
         enemy[i].gelatin = true;
         add_msg("魔法のラッパを吹き鳴らした。" + enemy[i].name + "の生命点を10点ずつうばっていく。");
     } else {
         add_msg("魔法のラッパをうまく鳴らせなかった。");
     }
     combat.Pip2enemy_turn();
 }

  // 稲妻の杖のサイコロ後
 combat.Pip_LightningWand = function () {
     add_msg("ピップは稲妻の杖を放った!");
     lose_magic("稲妻の杖", 1);
     var i = combat.find_Pip2enemy_target();
     enemy[i].LIFE_POINT -= dice.dice12pip * 2;
     add_msg("必中! " + enemy[i].name + "に" + (dice.dice12pip * 2) + "の被害点を与えた。");
     combat.Pip2enemy_turn();
 }

  // 火の玉のサイコロ後
 combat.Pip_Fireball = function () {
     add_msg("ピップは火の玉を放った!");
     lose_magic("火の玉", 1);
     if (dice.dice12pip >= 6) {
         var i = combat.find_Pip2enemy_target();
         enemy[i].LIFE_POINT -= 75;
         add_msg("命中! " + enemy[i].name + "に75点の被害点を与えた。");
     } else {
         add_msg("火の玉は外れてしまった。。。");
     }
     combat.Pip2enemy_turn();
 }

  // 破壊球のサイコロ後
 combat.Pip_Orb_of_Incredible_Destruction = function () {
     add_msg("ピップは破壊球を使った!");
     lose_magic("破壊球", 1);
     if (dice.die1pip >= 4) {
         var i;
         for(i = 0; i < enemy.length; i++) {
             enemy[i].LIFE_POINT = 0;
         }
         add_msg("敵は皆殺しになった!");
     } else {
         add_msg("きみは即死してしまった。");
     }
     combat.Pip2enemy_turn();
 }

  // 治療薬のサイコロ後
 function use_Healing_Potion() {
     add_msg("ピップは治療薬を使った。");
     lose_event("治療薬", 1);
 
     Pip.LIFE_POINT = Math.min(Pip.LIFE_POINT + dice.dice12pip, Pip.max_LIFE_POINT);
 
     add_msg("ピップの生命点が" + dice.dice12pip + "点回復した。");
     update_status();
 
     if (combat.onCombat === true) {
         combat.Pip2enemy_turn();
     }
 }

  // ハチミツのサイコロ後
 function use_honey() {
     add_msg("ピップはハチミツを食べた。");
     lose_event("ハチミツ", 1);
 
     Pip.LIFE_POINT = Math.min(Pip.LIFE_POINT + (dice.dice12pip * 2), Pip.max_LIFE_POINT);
 
     add_msg("ピップの生命点が" + (dice.dice12pip * 2) + "点回復した。");
     update_status();
 
     if (combat.onCombat === true) {
         combat.Pip2enemy_turn();
     }
 }

  // 悪魔を呼ぶ死の鐘のサイコロ後
 function sumonFred () {
     if (combat.onCombat === true) {
         add_msg("ピップは悪魔を呼ぶ死の鐘を鳴らした。");
         lose_event("悪魔を呼ぶ死の鐘", 1);
         if (dice.die1pip >= 3) {
             add_msg("フレッドがきみに加勢した!");
             Fred.sumon = true;
             Fred.done = false;
             window.setTimeout("Section.ctrl()", 0);
         } else {
             add_msg("フレッドが敵に加勢してしまった!");
             enemy[enemy.length-1].id_num = enemy_data[32].name;
             enemy[enemy.length-1].name = enemy_data[32].name;
             enemy[enemy.length-1].max_LIFE_POINT = enemy_data[32].max_LIFE_POINT;
             enemy[enemy.length-1].LIFE_POINT = enemy_data[32].LIFE_POINT;
             enemy[enemy.length-1].attack_base = enemy_data[32].attack_base;
             enemy[enemy.length-1].extra_damage = enemy_data[32].extra_damage;
             enemy[enemy.length-1].defence = enemy_data[32].defence;
             enemy[enemy.length-1].attack_way = enemy_data[32].attack_way;
             enemy[enemy.length-1].Bribery_amount = enemy_data[32].Bribery_amount;
             if (Pip.Seeker_Needle_enemy_name === "Fred") {
                 enemy[enemy.length-1].LIFE_POINT = Math.floor(enemy[enemy.length-1].LIFE_POINT /2);
                 add_msg("投げ針でフレッドの生命点は半減している。");
             }
             combat.Pip2enemy_turn();
         }
     } else {
         if (dice.die1pip >= 3) {
             Fred.sumon = true;
             add_msg("フレッドが味方になった。次1回の戦いに限り、被害点をすべて受けて闘ってくれる。");
         } else {
             add_msg("フレッドがきみを攻撃してきた!");
             Section.num = "Fred";
             combat.encounter();
         }
     }
 }

  // 復活の杖のサイコロ後
 function use_Resurrection_Wand() {
     add_msg("ピップは生命点を15点放出して、復活の杖を使った。");
     lose_magic("復活の杖", 1);
     Pip.LIFE_POINT -= 15;
     if (dice.dice12pip >= 9) {
         Pip.Resurrection_Wand = true;
         data_magic[15].label = "発動中";
         add_msg("成功! もう14も怖くない。");
     } else {
         add_msg("失敗した。");
     }
     update_status();
 }

素手、E・J、エクスカリバー、即死剣はcombat.Pip_strike()関数でまとめて処理する。

 // ピップの打撃攻撃
 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();
 }