Exemplo n.º 1
0
/* Magier weicht dem Kampf aus. Wenn er sich bewegen kann, zieht er in
 * eine Nachbarregion, wobei ein NACH beruecksichtigt wird. Ansonsten
 * bleibt er stehen und nimmt nicht weiter am Kampf teil. */
int sp_appeasement(struct castorder * co)
{
    fighter * fi = co->magician.fig;
    int level = co->level;

    const spell * sp = co->sp;
    battle *b = fi->side->battle;
    unit *mage = fi->unit;
    region *r = b->region;
    message *m;

    /* Fliehende Einheiten verlassen auf jeden Fall Gebaeude und Schiffe. */
    if (!(r->terrain->flags & SEA_REGION)) {
        leave(mage, false);
    }
    /* und bewachen nicht */
    setguard(mage, false);
    unit_setstatus(mage, ST_FLEE);

    /* wir tun so, als waere die Person geflohen */
    fi->flags |= FIG_NOLOOT;
    fi->run.hp = mage->hp;
    fi->run.number = mage->number;
    /* fighter leeren */
    rmfighter(fi, mage->number);

    m = msg_message("cast_escape_effect", "mage spell", fi->unit, sp);
    message_all(b, m);
    msg_release(m);

    return level;
}
Exemplo n.º 2
0
/* Magier weicht dem Kampf aus. Wenn er sich bewegen kann, zieht er in
 * eine Nachbarregion, wobei ein NACH berücksichtigt wird. Ansonsten
 * bleibt er stehen und nimmt nicht weiter am Kampf teil. */
int sp_denyattack(struct castorder * co)
{
  fighter * fi = co->magician.fig;
  int level = co->level;

  const spell * sp = co->sp;
  battle *b = fi->side->battle;
  unit *mage = fi->unit;
  region *r = b->region;
  message *m;

  /* Fliehende Einheiten verlassen auf jeden Fall Gebäude und Schiffe. */
  if (!fval(r->terrain, SEA_REGION)) {
    leave(mage, false);
  }
  /* und bewachen nicht */
  setguard(mage, GUARD_NONE);
  /* irgendwie den langen befehl sperren */
  /* fset(fi, FIG_ATTACKED); */

  /* wir tun so, als wäre die Person geflohen */
  fset(fi, FIG_NOLOOT);
  fi->run.hp = mage->hp;
  fi->run.number = mage->number;
  /* fighter leeren */
  rmfighter(fi, mage->number);

  m = msg_message("cast_escape_effect", "mage spell", fi->unit, sp);
  message_all(b, m);
  msg_release(m);

  return level;
}