Ejemplo n.º 1
0
  // Use monster heart power
  function heart (DQC, scenario, command) {
    var member   = command.member;
    var dispName = member.displayName();
    var ability  = command.ability;
    var message  = '';
    var targets;

    if (ability) {
      message += dispName + "'s monster heart glows! ";
      // heart abilities can mimic spells, skills, or items
      switch (ability.type) {
        case 'ITEM':
          var item = new Item(ability.name, DQC.data);
          if (item.is_set) {
            message += item.displayMessage(dispName);
            targets = item.getTargets(scenario, member);
            message += ' ' + item.useItem(DQC, scenario, member, targets);
          }
          break;
        case 'SKILL':
          var skill = new Skill(ability.name, DQC.data);
          if (skill.is_set) {
            message += skill.displayMessage(dispName);
            if (DQC.RNG.bool(skill.miss, 32)) {
              message += ' But the move fails.';
            } else {
              targets = skill.getTargets(scenario, member);
              message += ' ' + skill.useSkill(DQC, scenario, member, targets);
            }
          }
          break;
        case 'SPELL':
          var spell = new Spell(ability.name, DQC.data);
          if (spell.is_set) {
            message += spell.displayMessage(dispName);
            if (DQC.RNG.bool(spell.miss, 32)) {
              message += ' But the spell fails.';
            } else {
              targets = spell.getTargets(scenario, member);
              message += ' ' + spell.castSpell(DQC, scenario, member, targets);
            }
          }
          break;
        default:
          break;
      }

      member.abilities.push(ability.name);
    }

    return message;
  }
Ejemplo n.º 2
0
  // Cast a spell
  function spell (DQC, scenario, command) {
    var member   = command.member;
    var spell    = new Spell(command.name, DQC.data);
    var dispName = member.displayName();
    var targets  = [];
    var message  = '';
    var useMP    = true;

    if (spell.is_set) {
      message = spell.displayMessage(dispName);
      if (member.curr_MP < spell.MP) {
        message += ' MP is not high enough!';
        useMP = false;
        if (member.is_enemy) { member.can_cast = false }

      } else if (_.includes(member.status, 'ST')) {
        message += ' But that spell hath been blocked!';
        if (member.is_enemy) { member.can_cast = false }

      } else if (DQC.RNG.bool(spell.miss, 32)) {
        message += ' But the spell fails.';

      } else {
        // get the target(s)
        targets = spell.getTargets(scenario, member);

        // cast the spell
        message += ' ' + spell.castSpell(DQC, scenario, member, targets);
      }

      if (useMP) {
        member.curr_MP -= spell.MP || 0;
        battleHelpers.checkMP(member);
      }
    }

    return message;
  }
Ejemplo n.º 3
0
  // Use a skill
  function skill (DQC, scenario, command) {
    var member   = command.member;
    var skill    = new Skill(command.name, DQC.data);
    var dispName = member.displayName();
    var targets  = [];
    var message  = '';

    if (skill.is_set) {
      message = skill.displayMessage(dispName);
      if (DQC.RNG.bool(skill.miss, 32)) {
        message += ' But the move fails.';

      } else {
        // get the target(s)
        targets = skill.getTargets(scenario, member);

        // use the skill
        message += ' ' + skill.useSkill(DQC, scenario, member, targets);
      }
    }

    return message;
  }
Ejemplo n.º 4
0
  // Use item
  function item (DQC, scenario, command) {
    var member   = command.member;
    var item     = new Item(command.name, DQC.data);
    var dispName = member.displayName();
    var shatter  = true;
    var targets  = [];
    var message  = '';

    if (item.is_set) {
      message = item.displayMessage(dispName);
      if (item.hasItem(member)) {
        if (item.ability) {
          // item mimics a skill or spell ability
          switch (item.ability.type) {
            case 'SKILL':
              var skill = new Skill(item.ability.name, DQC.data);
              if (skill.is_set) {
                if (DQC.RNG.bool(skill.miss, 32)) {
                  message += ' But nothing happens.';
                } else {
                  targets = skill.getTargets(scenario, member);
                  message += ' ' + skill.useSkill(DQC, scenario, member, targets);
                }
              }
              break;
            case 'SPELL':
              var spell = new Spell(item.ability.name, DQC.data);
              spell.can_bounce = false;
              if (spell.is_set) {
                if (DQC.RNG.bool(spell.miss, 32)) {
                  message += ' But nothing happens.';
                } else {
                  targets = spell.getTargets(scenario, member);
                  message += ' ' + spell.castSpell(DQC, scenario, member, targets);
                }
              }
              break;
            default:
              break;
          }

        } else {
          targets = item.getTargets(scenario, member);
          message += ' ' + item.useItem(DQC, scenario, member, targets);
        }

        if (item.is_item) {
          // check whether the item is lost after use
          if (item.durability) {
            shatter = !DQC.RNG.bool(item.durability, 32);
            message += shatter ? ' The ' + item.name + ' shatters!' : '';
          }
          if (shatter) {
            item.removeItem(member);
          }
        }
      } else {
        message += ' But it is nowhere to be found!';
      }
    }

    return message;
  }