diff --git a/src/common/kernel/spell.c b/src/common/kernel/spell.c index d628b5ddd..00bae462a 100644 --- a/src/common/kernel/spell.c +++ b/src/common/kernel/spell.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: spell.c,v 1.3 2001/01/31 13:03:18 corwin Exp $ + * $Id: spell.c,v 1.4 2001/01/31 14:32:58 corwin Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -3016,6 +3016,78 @@ sp_wisps(castorder *co) return cast_level; } #endif + +/* ------------------------------------------------------------- */ +/* Name: Unheilige Kraft + * Stufe: 10 + * Gebiet: Draig + * Kategorie: Untote Einheit, positiv + * + * Wirkung: + * transformiert (Stufe)W10 Untote in ihre stärkere Form + * + * + * Flag: + * (SPELLLEVEL | TESTCANSEE) + */ + +static int +sp_unholypower(castorder *co) +{ + unit *mage = (unit *)co->magician; + int cast_level = co->level; + spellparameter *pa = co->par; + int i; + int n; + + n = dice(cast_level, 10); + + for (i = 0; i < pa->length && n > 0; i++) { + race_t target_race; + unit *u = pa->param[n]->data.u; + + switch(u->race) { + case RC_SKELETON: + target_race = RC_SKELETON_LORD; break; + case RC_ZOMBIE: + target_race = RC_ZOMBIE_LORD; break; + case RC_GHOUL: + target_race = RC_GHOUL_LORD; break; + default: + cmistake(mage, strdup(co->order), 280, MSG_MAGIC); + continue; + } + + if(u->number <= n) { + n -= u->number; + u->race = target_race; + add_message(&co->rt->msgs, new_message(mage->faction, + "unholypower_effect%u:mage%u:target%s:targetrace", mage, u)); + } else { + unit *un; + + /* Wird hoffentlich niemals vorkommen. Es gibt im Source + * vermutlich eine ganze Reihe von Stellen, wo das nicht + * korrekt abgefangen wird. Besser (aber nicht gerade einfach) + * wäre es, eine solche Konstruktion irgendwie zu kapseln. */ + if(fval(u, FL_LOCKED) || fval(u, FL_HUNGER) + || is_cursed(u->attribs, C_SLAVE, 0)) { + cmistake(mage, strdup(co->order), 74, MSG_MAGIC); + continue; + } + + un = createunit(co->rt, u->faction, n, target_race); + scale_number(u, u->number - n); + add_message(&co->rt->msgs, new_message(mage->faction, + "unholypower_limitedeffect%u:mage%u:target%s:race%i:amount", + mage, u, race[u->race].name[n==1?0:1], n)); + n = 0; + } + } + + return cast_level; +} + /* ------------------------------------------------------------- */ /* Name: Todeswolke * Stufe: 11 @@ -7830,6 +7902,24 @@ spell spelldaten[] = {0, 0, 0}}, (spell_f)sp_destroy_magic, patzer }, + + {SPL_UNHOLYPOWER, "Unheilige Kraft", + "Nur geflüstert wird dieses Ritual an den dunklen Akademien an die " + "Adepten weitergegeben, gehört es doch zu den finstersten, die je " + "niedergeschrieben wurden. Durch die Anrufung unheiliger Dämonen " + "wird die Kraft der lebenden Toten verstärkt und sie verwandeln " + "sich in untote Monster großer Kraft.", + NULL, + "u+", + M_CHAOS, (SPELLLEVEL | TESTCANSEE), 5, 10, + { + {R_AURA, 8, SPC_LEVEL}, + {R_PEASANTS, 50, SPC_LEVEL}, + {0, 0, 0}, + {0, 0, 0}, + {0, 0, 0}}, + (spell_f)sp_unholypower, patzer + }, {SPL_DEATHCLOUD, "Todeswolke", "Mit einem düsteren Ritual und unter Opferung seines eigenen Blutes " @@ -8001,14 +8091,15 @@ spell spelldaten[] = }, {SPL_PUTTOREST, "Seelenfrieden", - "Dieses magische Ritual beruhigt die gequälten Seelen der gewaltsam zu Tode " - "gekommenen und ermöglicht es ihnen so, ihre letzte Reise in die Anderlande " - "zu beginnen. Je Stufe des Zaubers werden ungefähr 50 Seelen ihre Ruhe " - "finden. Der Zauber vermag nicht, bereits wieder auferstandene lebende Tote " - "zu erlösen, da deren Bindung an diese Welt zu stark ist.", + "Dieses magische Ritual beruhigt die gequälten Seelen der gewaltsam " + "zu Tode gekommenen und ermöglicht es ihnen so, ihre letzte Reise in " + "die Anderlande zu beginnen. Je Stufe des Zaubers werden ungefähr 50 " + "Seelen ihre Ruhe finden. Der Zauber vermag nicht, bereits wieder " + "auferstandene lebende Tote zu erlösen, da deren Bindung an diese " + "Welt zu stark ist.", NULL, NULL, - M_TRAUM, (0), 5, 2, + M_TRAUM, (SPELLLEVEL), 5, 2, { {R_AURA, 3, SPC_LEVEL}, {R_TREES, 1, SPC_FIX}, @@ -8019,10 +8110,10 @@ spell spelldaten[] = }, {SPL_ICASTLE, "Traumschlößchen", - "Mit Hilfe dieses Zaubers kann der Traumweber die Illusion eines beliebigen " - "Gebäudes erzeugen. Die Illusion kann betreten werden, ist aber ansonsten " - "funktionslos und benötigt auch keinen Unterhalt. Sie wird einige Wochen " - "bestehen bleiben.", + "Mit Hilfe dieses Zaubers kann der Traumweber die Illusion eines " + "beliebigen Gebäudes erzeugen. Die Illusion kann betreten werden, ist " + "aber ansonsten funktionslos und benötigt auch keinen Unterhalt. Sie " + "wird einige Wochen bestehen bleiben.", "ZAUBERE \"Traumschlößchen\" ", "c", M_TRAUM, (0), 5, 3, diff --git a/src/common/kernel/spell.h b/src/common/kernel/spell.h index edf379c64..144fd881f 100644 --- a/src/common/kernel/spell.h +++ b/src/common/kernel/spell.h @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: spell.h,v 1.3 2001/01/31 13:03:19 corwin Exp $ + * $Id: spell.h,v 1.4 2001/01/31 14:32:58 corwin Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -192,6 +192,7 @@ enum { SPL_BECOMEWYRM, SPL_ETERNIZEWALL, SPL_PUTTOREST, + SPL_UNHOLYPOWER, MAXALLSPELLS, NO_SPELL = (spellid_t) -1 }; diff --git a/src/common/races/zombies.c b/src/common/races/zombies.c index 2051b68ad..1330e08eb 100644 --- a/src/common/races/zombies.c +++ b/src/common/races/zombies.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: zombies.c,v 1.2 2001/01/26 16:19:41 enno Exp $ + * $Id: zombies.c,v 1.3 2001/01/31 14:32:58 corwin Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -85,7 +85,7 @@ age_undead(unit *u) void age_skeleton(unit *u) { - if (rand()%100 < age_chance(u->age, 27, 1)) { + if (u->faction->no == 0 && rand()%100 < age_chance(u->age, 27, 1)) { double q = (double) u->hp / (double) (unit_max_hp(u) * u->number); u->race = RC_SKELETON_LORD; u->irace = RC_SKELETON_LORD; @@ -97,7 +97,7 @@ age_skeleton(unit *u) void age_zombie(unit *u) { - if (rand()%100 < age_chance(u->age, 27, 1)) { + if (u->faction->no == 0 && rand()%100 < age_chance(u->age, 27, 1)) { double q = (double) u->hp / (double) (unit_max_hp(u) * u->number); u->race = RC_ZOMBIE_LORD; u->irace = RC_ZOMBIE_LORD; @@ -109,7 +109,7 @@ age_zombie(unit *u) void age_ghoul(unit *u) { - if (rand()%100 < age_chance(u->age, 27, 1)) { + if (u->faction->no == 0 && rand()%100 < age_chance(u->age, 27, 1)) { double q = (double) u->hp / (double) (unit_max_hp(u) * u->number); u->race = RC_GHOUL_LORD; u->irace = RC_GHOUL_LORD; diff --git a/src/eressea/korrektur.c b/src/eressea/korrektur.c index b34589737..fe0cc954c 100644 --- a/src/eressea/korrektur.c +++ b/src/eressea/korrektur.c @@ -1,6 +1,6 @@ /* vi: set ts=2: * - * $Id: korrektur.c,v 1.7 2001/01/31 13:03:20 corwin Exp $ + * $Id: korrektur.c,v 1.8 2001/01/31 14:32:59 corwin Exp $ * Eressea PB(E)M host Copyright (C) 1998-2000 * Christian Schlittchen (corwin@amber.kn-bremen.de) * Katja Zedel (katze@felidae.kn-bremen.de) @@ -998,7 +998,7 @@ show_newspells(void) /* Alle geänderten Zauber in das array newspellids[]. mit SPL_NOSPELL * terminieren */ - spellid_t newspellids[] = { SPL_ETERNIZEWALL, SPL_PUTTOREST, SPL_NOSPELL }; + spellid_t newspellids[] = { SPL_ETERNIZEWALL, SPL_PUTTOREST, SPL_UNHOLYPOWER, SPL_NOSPELL }; /* die id's der neuen oder veränderten Sprüche werden in newspellids[] * abgelegt */ diff --git a/src/res/messages.de b/src/res/messages.de index 6384057e9..c7c1021e2 100644 --- a/src/res/messages.de +++ b/src/res/messages.de @@ -1,5 +1,5 @@ # Kommentare sind erlaubt. Endlich. -# $Id: messages.de,v 1.2 2001/01/31 13:03:20 corwin Exp $ +# $Id: messages.de,v 1.3 2001/01/31 14:32:59 corwin Exp $ # Fehlermeldungen: msg_errors;errors:0;de;{string} @@ -279,6 +279,7 @@ error276;errors:0;de;{unit} in {region}: '{command}' - Hier kann man keine Schif error277;errors:0;de;{unit} in {region}: '{command}' - Das kann die Einheit nicht. error278;errors:0;de;{unit} in {region}: '{command}' - Der Name des Gebäudes kann nicht geändert werden. error279;errors:0;de;{unit} in {region}: '{command}' - Die Beschreibung des Gebäudes kann nicht geändert werden. +error280;errors:0;de;{unit} in {region}: '{command}' - Nur Untote können das Ziel dieses Zaubers sein. # Meldungen und Ereignisse msg_event;events:0;de;{string} @@ -481,6 +482,8 @@ firewall_effect;magic:0;de;{mage} erschafft in {region} eine Wand aus Feuer. wisps_effect;magic:0;de;{mage} ruft Irrlichter in {region}. becomewyrm;magic;2;de;{mage} verwandelt sich in einen Wyrm. puttorest;magic;0;de;{mage} befreit die gequälten Seelen der Toten. +unholypower_effect;0;de;{mage} verwandelt {target}. +unholypower_effect;0;de;{mage} verwandelt {amount} {race} aus {target}. # Kämpfe msg_battle;battle:0;de;{string}