「JavaScriptで、アイテムを使って効果発揮」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
所持品のボタンをクリックしたときの処理。まず、ボタンは上から
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();
}