アットウィキロゴ

魔法の効果や毒の効果など、すべての効果を実装した戦闘処理関数を細かく紹介する。 まずは、敵のデータを読み込む関数combat.encounter()を紹介。

枝葉の部分は……

  • まぬけな百姓とずんぐりとした百姓は、ピップまたは敵の先攻が指定されている。
  • 食屍鬼の生命点は、現在のピップの生命点。
  • 魔女3人は1人ずつの3連戦。連戦中に以前倒した魔女とデータが重ならないようにしたい。
  • 魔女スクロッグは、数に限りのあるドラゴン・ファイア錠を使うのでenemy[Section.subnum].Dragonfire_pillで残り数を管理。
  • 狼は連続2回攻撃できるので、何度目の攻撃かを表すenemy[i].wolf_double_attackを作る。
  • 投げ針という魔法の品は、事前に敵の生命点を半減させる効果があるので実装。
combat.encounter = function (){
   var i;

   enemy_party.exist = true;
   Pip.quick = 0;
   enemy_party.quick = 0;
   combat.turn_num = 0;
   combat.round = 0;
   Pip.round_damage = 0;

   if (Section.num === "46") { //まぬけな百姓
       enemy_party.id_num = 1;
       enemy_party.num = 1;
       enemy_party.quick = -1;
   } else if (Section.num === "75") { //まぬけな百姓
       enemy_party.id_num = 2;
       enemy_party.num = 1;
       enemy_party.quick = -1;
   } else if (Section.num === "66") { //ずんぐりした百姓
       enemy_party.id_num = 3;
       enemy_party.num = 1;
       Pip.quick = -1;
       enemy_party.quick = 10;
   } else if (Section.num === "83") { //乱暴な百姓
       enemy_party.id_num = 4;
       enemy_party.num = 3;
   } else if (Section.num === "41") { // 盗賊
       enemy_party.id_num = 5;
       enemy_party.num = 1;
   } else if (Section.num === "70") { // 醜い百姓
       enemy_party.id_num = 6;
       enemy_party.num = 25;
   } else if (Section.num === "16") { // 黒衣の祭司
       enemy_party.id_num = 7;
       enemy_party.num = 3;
   } else if (Section.num === "56") { // 巨人
       enemy_party.id_num = 8;
       enemy_party.num = 1;
   } else if (Section.num === "105") { // 食屍鬼
       enemy_party.id_num = 9;
       enemy_party.num = 1;
       enemy_data[9].LIFE_POINT = Pip.LIFE_POINT;
       enemy_data[9].max_LIFE_POINT = Pip.max_LIFE_POINT;
   } else if (Section.num === "17") { // 砂のドラゴン
       enemy_party.id_num = 10;
       enemy_party.num = 1;
   } else if (Section.num === "19") { // 野蛮人
       enemy_party.id_num = 11;
       enemy_party.num = 3;
   } else if (Section.num === "36" && Section.subnum === 0) { // 三つ目獣
       enemy_party.id_num = 12;
       enemy_party.num = 1;
   } else if (Section.num === "36" && Section.subnum === 1) { // 兵士ベン
       enemy_party.id_num = 13;
       enemy_party.num = 1;
   } else if (Section.num === "116") { // ブロン
       enemy_party.id_num = 14;
       enemy_party.num = 3 + dice.die1pip;
   } else if (Section.num === "73") { // サソリ
       enemy_party.id_num = 15;
       enemy_party.num = 1;
   } else if (Section.num === "82") { // 見えない敵
       enemy_party.id_num = 16;
       enemy_party.num = 1;
       Pip.quick = -1;
   } else if (Section.num === "78" && Section.subnum === 0) { // 魔女ミニー
       enemy_party.id_num = 17;
       enemy_party.num = 1;
   } else if (Section.num === "78" && Section.subnum === 1) { // 魔女アギー
       enemy_party.id_num = 18;
       enemy_party.num = 2;
   } else if (Section.num === "78" && Section.subnum === 2) { // 魔女スクロッグ
       enemy_party.id_num = 19;
       enemy_party.num = 3;
   } else if (Section.num === "20") { // 狼
       enemy_party.id_num = 20;
       enemy_party.num = 1;
       enemy[0].wolf_double_speed = 1;
   } else if (Section.num === "54") { // カメレオン怪人
       enemy_party.id_num = 21;
       enemy_party.num = 1;
   } else if (Section.num === "114") { // 悪魔の落とし子
       enemy_party.id_num = 22;
       enemy_party.num = 1;
   } else if (Section.num === "85") { // パトロール警官
       enemy_party.id_num = 23;
       enemy_party.num = dice.die1pip;
   } else if (Section.num === "93") { // 見張り
       enemy_party.id_num = 24;
       enemy_party.num = dice.dice12pip;
   } else if (Section.num === "110") { //  僧
       enemy_party.id_num = 25;
       enemy_party.num = 2;
   } else if (Section.num === "129") { // こそ泥サム
       enemy_party.id_num = 26;
       enemy_party.num = 1;
   } else if (Section.num === "131") { // アドルフ
       enemy_party.id_num = 27;
       enemy_party.num = 1;
   } else if (Section.num === "146") { // マオ
       enemy_party.id_num = 28;
       enemy_party.num = 1;
   } else if (Section.num === "154") { // 警官
       enemy_party.id_num = 29;
       enemy_party.num = 1;
   } else if (Section.num === "216") { // ゼリー・モンスター
       enemy_party.id_num = 30;
       enemy_party.num = 1;
   } else if (Section.num === "171") { // ワニガエル獣
       enemy_party.id_num = 31;
       enemy_party.num = 1;
   } else if (Section.num === "Fred") { // フレッド
       enemy_party.id_num = 32;
       enemy_party.num = 1;
   } else if (Section.num === "D7") { // 骸骨
       enemy_party.id_num = 33;
       enemy_party.num = 1;
   } else if (Section.num === "D8") { // 亡霊
       enemy_party.id_num = 34;
       enemy_party.num = dice.die1pip;
   }

   enemy_party.name = enemy_data[enemy_party.id_num].name;

   if (Section.num === "78") { // 魔女は1人ずつ襲いかかってくる
       enemy[Section.subnum].id_num =  enemy_party.id_num;
       enemy[Section.subnum].name = enemy_data[enemy_party.id_num].name;
       enemy[Section.subnum].max_LIFE_POINT = enemy_data[enemy_party.id_num].max_LIFE_POINT;
       enemy[Section.subnum].LIFE_POINT = enemy_data[enemy_party.id_num].LIFE_POINT;
       enemy[Section.subnum].attack_base = enemy_data[enemy_party.id_num].attack_base;
       enemy[Section.subnum].extra_damage = enemy_data[enemy_party.id_num].extra_damage;
       enemy[Section.subnum].defence = enemy_data[enemy_party.id_num].defence;
       enemy[Section.subnum].attack_way = enemy_data[enemy_party.id_num].attack_way;
       enemy[Section.subnum].Bribery_amount = enemy_data[enemy_party.id_num].Bribery_amount;

   } else if (enemy_party.num === 1) {
       enemy[0].id_num =  enemy_party.id_num;
       enemy[0].name = enemy_data[enemy_party.id_num].name;
       enemy[0].max_LIFE_POINT = enemy_data[enemy_party.id_num].max_LIFE_POINT;
       enemy[0].LIFE_POINT = enemy_data[enemy_party.id_num].LIFE_POINT;
       enemy[0].attack_base = enemy_data[enemy_party.id_num].attack_base;
       enemy[0].extra_damage = enemy_data[enemy_party.id_num].extra_damage;
       enemy[0].defence = enemy_data[enemy_party.id_num].defence;
       enemy[0].attack_way = enemy_data[enemy_party.id_num].attack_way;
       enemy[0].Bribery_amount = enemy_data[enemy_party.id_num].Bribery_amount;
   } else { // enemy_party.num > 1
       for (i = 0; i < enemy_party.num; i++) {
           enemy[i].id_num = enemy_party.id_num;
           enemy[i].name = enemy_data[enemy_party.id_num].name + (i + 1);
           enemy[i].max_LIFE_POINT = enemy_data[enemy_party.id_num].max_LIFE_POINT;
           enemy[i].LIFE_POINT = enemy_data[enemy_party.id_num].LIFE_POINT;
           enemy[i].attack_base = enemy_data[enemy_party.id_num].attack_base;
           enemy[i].extra_damage = enemy_data[enemy_party.id_num].extra_damage;
           enemy[i].defence = enemy_data[enemy_party.id_num].defence;
           enemy[i].attack_way = enemy_data[enemy_party.id_num].attack_way;
           enemy[i].Bribery_amount = enemy_data[enemy_party.id_num].Bribery_amount;
       }
   }

   if (Section.num === "78" && Section.subnum === 2) { // 魔女スクロッグ
       enemy[Section.subnum].Dragonfire_pill = 6
   }

   if (Section.num === "20") {
       enemy[0].wolf_double_attack = 0;
   }

   if (Pip.Seeker_Needle_enemy_name === enemy_party.name) {
       if (Section.num === "78") {
           enemy[Section.subnum].LIFE_POINT = Math.floor(enemy[Section.subnum].LIFE_POINT/2);
           add_msg("投げ針で" + enemy[Section.subnum].name + "の生命点は半減している。");
       } else {
           enemy[0].LIFE_POINT = Math.floor(enemy[0].LIFE_POINT/2);
           add_msg("投げ針で" + enemy[0].name + "の生命点は半減している。");
       }
   }

   update_status();
   add_msg("戦闘を開始するには「戦闘開始」をクリックせよ。「友好反応」「ワイロ」「逃亡」などはそのボタンをクリックせよ。");
}

タグ:

+ タグ編集
  • タグ:
最終更新:2012年04月03日 17:47