「JavaScriptで、味方の攻撃(詳細)」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
ピップの行動は打撃攻撃のみ載せる。他の行動は、アイテムを使う処理にすべて書いてあるので、そちらを参照されたい。
1対1の殴りあいより複雑になったことは、、、
-敵が複数の場合は、どの敵を選ぶか自動で選ぶ。
-召還悪魔フレッドがこちらに加勢した場合、ピップの後、敵1の前に攻撃させるようにする。
-魔法の効果やステータス変化たくさんありすぎ
// ピップが行動可能か調べ、ユーザーにピップの行動ボタンをクリックするよう促す
combat.Pip_select = function (){
// ターン数の計算
if (Pip.first_strike === true) {
combat.turn_num++;
}
//add_msg("combat.Pip_select()に入った。");
if (Pip.LIFE_POINT <= 0) {
add_msg("ピップは死んでいる。。。");
combat.Pip2enemy_turn();
} else if (Pip.LIFE_POINT <= 5) {
add_msg("ピップは気絶している。。。");
combat.do_next = "enemy0_select";
combat.Pip2enemy_turn();
} else {
add_msg("ピップはどうする? 「殴る」などの行動ボタンをクリックせよ。");
//combat.do_next = "Pip_do";
}
if (Pip.bone_pain === true) {
add_msg("夢時間で自分の骨をバラバラにしたので、敵に与えるダメージが半減している。");
}
if (Pip.yoga > 0) {
add_msg("ヨガで関節が痛み、、敵に与える被害点が2点マイナスされる。");
}
}
// 「殴る」をクリック
function click_punch() {
Pip.attack_base = 6;
Pip.extra_damage = 0;
Pip.attack_way = "素手";
dice.start(2,"combat.Pip_strike()");
}
// 戦利品アイテムを使用
function click_event(i) {
// 略
}
// マーリンの隠れ家2の装備品アイテムを使用
function click_equip(i) {
// 略
}
// マーリンの隠れ家3の魔法の品アイテムを使用
function click_magic(i) {
// 略
}
// ピップや味方フレッドが攻撃する敵の対象を自動で選ぶ
combat.find_Pip2enemy_target = function () { //find target
var i = 0;
var found_target = -1;
for (i = 0; i < enemy.length; i++) {
if (found_target === -1 && enemy[i].LIFE_POINT > 5 && enemy[i].Friendly_Reaction === false && enemy[i].Bribery === false) {
found_target = i;
}
}
if (found_target === -1) {
for (i = 0; i < enemy.length; i++) {
if (found_target === -1 && enemy[i].LIFE_POINT > 0 && enemy[i].Friendly_Reaction === false && enemy[i].Bribery === false) {
found_target = i;
}
}
}
if (found_target === -1) {
add_msg("敵が見つからない?");
}
//add_msg("ピップが狙う標的は" + enemy[found_target].name + found_target);
return found_target;
}
// ピップが素手や剣などの打撃攻撃時の被害点計算
combat.Pip_strike = function () {
//add_msg("pip_strikeに入った。");
var i = combat.find_Pip2enemy_target();
if (Section.num === "82") { // 見えない敵
Pip.attack_base = Math.max(Pip.attack_base, 5);
} else if (Section.num === "171") { // ワニガエル獣
Pip.attack_base = Math.max(Pip.attack_base, 5);
}
var attack_point = Math.max(dice.dice12pip - Pip.attack_base, 0) + Pip.extra_damage;
var damage_point = attack_point - enemy[i].defence;
add_msg("ピップは" + Pip.attack_way + "で" + enemy[i].name + "を攻撃。");
if (Pip.bone_pain === true) {
add_msg("夢時間で自分の骨をバラバラにしたので、敵に与えるダメージが半減している。");
damage_point = Math.floor(damage_point / 2);
}
if (Pip.yoga > 0) {
add_msg("ヨガで関節が痛み、敵に与える被害点が2点マイナスされる。");
damage_point -= 2;
}
if (Pip.Lucky_Coin > 0) {
add_msg("幸運の金貨で、敵に与える被害点が2点プラスされる。");
damage_point += 2;
}
if (Pip.attack_way === "即死剣" && dice.dice12pip >= 11) {
add_msg("即死剣で" + enemy[i].name + "は即死した!");
enemy[i].LIFE_POINT = 0;
update_status();
} else if (dice.dice12pip - Pip.attack_base <= 0) {
add_msg("空振り!");
} else if (damage_point <= 0) {
add_msg("ミス! " + enemy[i].name + "に攻撃が通らない。");
} else {
if (EJ.pudding > 0) {
add_msg("E・Jがプリンになっているので与える被害点は2点になってしまう。");
damage_point = 2;
}
if (Pip.Lucky_Coin > 0) {
Pip.Lucky_Coin--;
if (Pip.Lucky_Coin > 0) {
add_msg("幸運の金貨の効果は残り" + Pip.Lucky_Coin + "回。");
} else {
add_msg("幸運の金貨の効果が切れた。");
data_magic[9].label = "使う";
}
}
enemy[i].LIFE_POINT -= damage_point;
add_msg("ピップは" + enemy[i].name + "に" + damage_point + "点の被害点を与えた。");
if (Section.num === "131") {
combat.round++;
add_msg("きみが一撃を与えてラウンド" + combat.round + "が終了した。");
}
if (Section.num === "146") {
combat.round++;
add_msg("きみが一撃を与えてラウンド" + combat.round + "が終了した。");
}
update_status();
}
combat.Pip2enemy_turn();
}
// 味方フレッドが行動できるか判定
combat.Fred_select = function () {
//add_msg("combat.Fred_select()に入った。");
if (Fred.sumon === false) {
//add_msg("フレッドは味方についていない。");
combat.enemy_select(0);
} else if (Fred.LIFE_POINT <= 0) {
add_msg("フレッドは死んでいる。");
combat.enemy_select(0);
} else if (Fred.LIFE_POINT <= 5) {
add_msg("フレッドは気絶している。");
combat.enemy_select(0);
} else {
var i = combat.find_Pip2enemy_target();
add_msg("フレッドは" + Fred.attack_way + "で" + enemy[i].name + "を攻撃。");
dice.start(2, "combat.Fred_do()");
}
}
// 味方フレッドの攻撃
combat.Fred_do = function () {
var i = combat.find_Pip2enemy_target();
if (Section.num === "82") { // 見えない敵
Fred.attack_base = Math.max(Fred.attack_base, 5);
} else if (Section.num === "171") { // ワニガエル獣
Fred.attack_base = Math.max(Pip.attack_base, 5);
}
var attack_point = Math.max(dice.dice12pip - Fred.attack_base, 0) + Fred.extra_damage;
var damage_point = attack_point - enemy[i].defence;
//add_msg("dice.dice12pip = " + dice.dice12pip );
//add_msg("Fred.attack_base = " + Fred.attack_base );
//add_msg("Fred.extra_damage = " + Fred.extra_damage );
//add_msg("attack_point = " + attack_point );
//add_msg("enemy[i].defence = " + enemy[i].defence );
//add_msg("damage_point = " + damage_point );
if (dice.dice12pip - Fred.attack_base <= 0) {
add_msg("空振り!");
} else if (damage_point <= 0) {
add_msg("ミス! " + enemy[i].name + "に攻撃が通らない。");
} else {
enemy[i].LIFE_POINT -= damage_point;
add_msg("フレッドは" + enemy[i].name + "に" + damage_point + "点の被害点を与えた。");
update_status();
if (Section.num === "131") {
combat.round++;
add_msg("フレッドが一撃を与えてラウンド" + combat.round + "が終了した。");
}
if (Section.num === "146") {
combat.round++;
add_msg("フレッドが一撃を与えてラウンド" + combat.round + "が終了した。");
}
}
Fred.done = true;
combat.enemy_select(0);
}
// 戦闘を続行して敵にターンを渡すかどうか判断
combat.Pip2enemy_turn = function () {
var i;
var max_enemy_LIFE_POINT = 0;
for (i = 0; i < enemy.length; i++) {
if (enemy[i].Friendly_Reaction === true || enemy[i].Bribery === true) {
// 友好的またはワイロで買収された敵はカウントしない
} else {
max_enemy_LIFE_POINT = Math.max(max_enemy_LIFE_POINT, enemy[i].LIFE_POINT);
}
}
if (Pip.LIFE_POINT <= 0 && Pip.Resurrection_Wand === true) {
add_msg("復活の杖で14行きを避けた! ピップの生命点が完全回復した!");
Pip.Resurrection_Wand = false;
Pip.LIFE_POINT = Pip.max_LIFE_POINT;
data_magic[Pip_magic[i].id_num].label = "使う";
}
if (Pip.LIFE_POINT <= 0) { //ピップが死んだ
add_msg("ピップは生命点が0になった。14に行け。");
} else if (max_enemy_LIFE_POINT <= 0) { //敵が死んだ
add_msg("敵をやっつけた!");
combat.result(); //戦後処理へ
} else if (max_enemy_LIFE_POINT <= 5 && Section.num === "36" && Section.subnum === 0) { //三つ目獣を気絶
add_msg("三つ目獣を気絶させた!");
combat.result(); //戦後処理へ
} else if (combat.round === 4 && Section.num === "131") { // 4ラウンド終了
add_msg("4ラウンド終了。");
combat.result(); //戦後処理へ
} else if (combat.round === 4 && Section.num === "146") { // 4ラウンド終了
add_msg("4ラウンド終了。");
combat.result(); //戦後処理へ
} else {
if (Pip.Boots_of_Speed === 1) {
add_msg("スピードアップ靴のお陰でもう1回続けて行動できる。");
Pip.Boots_of_Speed = 2;
combat.Pip_select();
} else if (Pip.Boots_of_Speed === 2) {
add_msg("スピードアップ靴の2回目の行動が終わった。");
Pip.Boots_of_Speed = 1;
combat.Fred_select();
} else {
combat.Fred_select();
}
}
}
ピップの行動は打撃攻撃のみ載せる。他の行動は、アイテムを使う処理にすべて書いてあるので、そちらを参照されたい。
1対1の殴りあいより複雑になったことは、、、
-敵が複数の場合は、どの敵を選ぶか自動で選ぶ。
-召還悪魔フレッドがこちらに加勢した場合、ピップの後、敵1の前に攻撃させるようにする。
-魔法の効果やステータス変化たくさんありすぎ
// ピップが行動可能か調べ、ユーザーにピップの行動ボタンをクリックするよう促す
combat.Pip_select = function (){
// ターン数の計算
if (Pip.first_strike === true) {
combat.turn_num++;
}
//add_msg("combat.Pip_select()に入った。");
if (Pip.LIFE_POINT <= 0) {
add_msg("ピップは死んでいる。。。");
combat.Pip2enemy_turn();
} else if (Pip.LIFE_POINT <= 5) {
add_msg("ピップは気絶している。。。");
combat.do_next = "enemy0_select";
combat.Pip2enemy_turn();
} else {
add_msg("ピップはどうする? 「殴る」などの行動ボタンをクリックせよ。");
//combat.do_next = "Pip_do";
}
if (Pip.bone_pain === true) {
add_msg("夢時間で自分の骨をバラバラにしたので、敵に与えるダメージが半減している。");
}
if (Pip.yoga > 0) {
add_msg("ヨガで関節が痛み、、敵に与える被害点が2点マイナスされる。");
}
}
// 「殴る」をクリック
function click_punch() {
Pip.attack_base = 6;
Pip.extra_damage = 0;
Pip.attack_way = "素手";
dice.start(2,"combat.Pip_strike()");
}
// 戦利品アイテムを使用
function click_event(i) {
// 略
}
// マーリンの隠れ家2の装備品アイテムを使用
function click_equip(i) {
// 略
}
// マーリンの隠れ家3の魔法の品アイテムを使用
function click_magic(i) {
// 略
}
// ピップや味方フレッドが攻撃する敵の対象を自動で選ぶ
combat.find_Pip2enemy_target = function () { //find target
var i = 0;
var found_target = -1;
for (i = 0; i < enemy.length; i++) {
if (found_target === -1 && enemy[i].LIFE_POINT > 5 && enemy[i].Friendly_Reaction === false && enemy[i].Bribery === false) {
found_target = i;
}
}
if (found_target === -1) {
for (i = 0; i < enemy.length; i++) {
if (found_target === -1 && enemy[i].LIFE_POINT > 0 && enemy[i].Friendly_Reaction === false && enemy[i].Bribery === false) {
found_target = i;
}
}
}
if (found_target === -1) {
add_msg("敵が見つからない?");
}
//add_msg("ピップが狙う標的は" + enemy[found_target].name + found_target);
return found_target;
}
// ピップが素手や剣などの打撃攻撃時の被害点計算
combat.Pip_strike = function () {
//add_msg("pip_strikeに入った。");
var i = combat.find_Pip2enemy_target();
if (Section.num === "82") { // 見えない敵
Pip.attack_base = Math.max(Pip.attack_base, 5);
} else if (Section.num === "171") { // ワニガエル獣
Pip.attack_base = Math.max(Pip.attack_base, 5);
}
var attack_point = Math.max(dice.dice12pip - Pip.attack_base, 0) + Pip.extra_damage;
var damage_point = attack_point - enemy[i].defence;
add_msg("ピップは" + Pip.attack_way + "で" + enemy[i].name + "を攻撃。");
if (Pip.bone_pain === true) {
add_msg("夢時間で自分の骨をバラバラにしたので、敵に与えるダメージが半減している。");
damage_point = Math.floor(damage_point / 2);
}
if (Pip.yoga > 0) {
add_msg("ヨガで関節が痛み、敵に与える被害点が2点マイナスされる。");
damage_point -= 2;
}
if (Pip.Lucky_Coin > 0) {
add_msg("幸運の金貨で、敵に与える被害点が2点プラスされる。");
damage_point += 2;
}
if (Pip.attack_way === "即死剣" && dice.dice12pip >= 11) {
add_msg("即死剣で" + enemy[i].name + "は即死した!");
enemy[i].LIFE_POINT = 0;
update_status();
} else if (dice.dice12pip - Pip.attack_base <= 0) {
add_msg("空振り!");
} else if (damage_point <= 0) {
add_msg("ミス! " + enemy[i].name + "に攻撃が通らない。");
} else {
if (EJ.pudding > 0) {
add_msg("E・Jがプリンになっているので与える被害点は2点になってしまう。");
damage_point = 2;
}
if (Pip.Lucky_Coin > 0) {
Pip.Lucky_Coin--;
if (Pip.Lucky_Coin > 0) {
add_msg("幸運の金貨の効果は残り" + Pip.Lucky_Coin + "回。");
} else {
add_msg("幸運の金貨の効果が切れた。");
data_magic[9].label = "使う";
}
}
enemy[i].LIFE_POINT -= damage_point;
add_msg("ピップは" + enemy[i].name + "に" + damage_point + "点の被害点を与えた。");
if (Section.num === "131") {
combat.round++;
add_msg("きみが一撃を与えてラウンド" + combat.round + "が終了した。");
}
if (Section.num === "146") {
combat.round++;
add_msg("きみが一撃を与えてラウンド" + combat.round + "が終了した。");
}
update_status();
}
combat.Pip2enemy_turn();
}
// 味方フレッドが行動できるか判定
combat.Fred_select = function () {
//add_msg("combat.Fred_select()に入った。");
if (Fred.sumon === false) {
//add_msg("フレッドは味方についていない。");
combat.enemy_select(0);
} else if (Fred.LIFE_POINT <= 0) {
add_msg("フレッドは死んでいる。");
combat.enemy_select(0);
} else if (Fred.LIFE_POINT <= 5) {
add_msg("フレッドは気絶している。");
combat.enemy_select(0);
} else {
var i = combat.find_Pip2enemy_target();
add_msg("フレッドは" + Fred.attack_way + "で" + enemy[i].name + "を攻撃。");
dice.start(2, "combat.Fred_do()");
}
}
// 味方フレッドの攻撃
combat.Fred_do = function () {
var i = combat.find_Pip2enemy_target();
if (Section.num === "82") { // 見えない敵
Fred.attack_base = Math.max(Fred.attack_base, 5);
} else if (Section.num === "171") { // ワニガエル獣
Fred.attack_base = Math.max(Pip.attack_base, 5);
}
var attack_point = Math.max(dice.dice12pip - Fred.attack_base, 0) + Fred.extra_damage;
var damage_point = attack_point - enemy[i].defence;
//add_msg("dice.dice12pip = " + dice.dice12pip );
//add_msg("Fred.attack_base = " + Fred.attack_base );
//add_msg("Fred.extra_damage = " + Fred.extra_damage );
//add_msg("attack_point = " + attack_point );
//add_msg("enemy[i].defence = " + enemy[i].defence );
//add_msg("damage_point = " + damage_point );
if (dice.dice12pip - Fred.attack_base <= 0) {
add_msg("空振り!");
} else if (damage_point <= 0) {
add_msg("ミス! " + enemy[i].name + "に攻撃が通らない。");
} else {
enemy[i].LIFE_POINT -= damage_point;
add_msg("フレッドは" + enemy[i].name + "に" + damage_point + "点の被害点を与えた。");
update_status();
if (Section.num === "131") {
combat.round++;
add_msg("フレッドが一撃を与えてラウンド" + combat.round + "が終了した。");
}
if (Section.num === "146") {
combat.round++;
add_msg("フレッドが一撃を与えてラウンド" + combat.round + "が終了した。");
}
}
Fred.done = true;
combat.enemy_select(0);
}
// 戦闘を続行して敵にターンを渡すかどうか判断
combat.Pip2enemy_turn = function () {
var i;
var max_enemy_LIFE_POINT = 0;
for (i = 0; i < enemy.length; i++) {
if (enemy[i].Friendly_Reaction === true || enemy[i].Bribery === true) {
// 友好的またはワイロで買収された敵はカウントしない
} else {
max_enemy_LIFE_POINT = Math.max(max_enemy_LIFE_POINT, enemy[i].LIFE_POINT);
}
}
if (Pip.LIFE_POINT <= 0 && Pip.Resurrection_Wand === true) {
add_msg("復活の杖で14行きを避けた! ピップの生命点が完全回復した!");
Pip.Resurrection_Wand = false;
Pip.LIFE_POINT = Pip.max_LIFE_POINT;
data_magic[Pip_magic[i].id_num].label = "使う";
}
if (Pip.LIFE_POINT <= 0) { //ピップが死んだ
add_msg("ピップは生命点が0になった。14に行け。");
} else if (max_enemy_LIFE_POINT <= 0) { //敵が死んだ
add_msg("敵をやっつけた!");
combat.result(); //戦後処理へ
} else if (max_enemy_LIFE_POINT <= 5 && Section.num === "36" && Section.subnum === 0) { //三つ目獣を気絶
add_msg("三つ目獣を気絶させた!");
combat.result(); //戦後処理へ
} else if (combat.round === 4 && Section.num === "131") { // 4ラウンド終了
add_msg("4ラウンド終了。");
combat.result(); //戦後処理へ
} else if (combat.round === 4 && Section.num === "146") { // 4ラウンド終了
add_msg("4ラウンド終了。");
combat.result(); //戦後処理へ
} else {
if (Pip.Boots_of_Speed === 1) {
add_msg("スピードアップ靴のお陰でもう1回続けて行動できる。");
Pip.Boots_of_Speed = 2;
combat.Pip_select();
} else if (Pip.Boots_of_Speed === 2) {
add_msg("スピードアップ靴の2回目の行動が終わった。");
Pip.Boots_of_Speed = 1;
combat.Fred_select();
} else {
combat.Fred_select();
}
}
}