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

JavaScriptで、アイテムを使って効果発揮」(2012/04/03 (火) 17:11:46) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

所持品のボタンをクリックしたときの処理。まず、ボタンは上から 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(); }
所持品のボタンをクリックしたときの処理。まず、ボタンは上から 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(); }

表示オプション

横に並べて表示:
変化行の前後のみ表示: