diff --git a/src/common/kernel/curse.c b/src/common/kernel/curse.c index d76e971f1..c239c6ce5 100644 --- a/src/common/kernel/curse.c +++ b/src/common/kernel/curse.c @@ -711,73 +711,6 @@ cinfo_holyground(void * obj, typ_t typ, curse *c, int self) curseid(c)); return 1; } - -static int -cinfo_cursed_by_the_gods(void * obj, typ_t typ, curse *c, int self) -{ - region *r; - unused(typ); - unused(self); - - assert(typ == TYP_REGION); - r = (region *)obj; - if (rterrain(r)!=T_OCEAN){ - sprintf(buf, - "Diese Region wurde von den Göttern verflucht. Stinkende Nebel ziehen " - "über die tote Erde und furchtbare Kreaturen ziehen über das Land. Die Brunnen " - "sind vergiftet, und die wenigen essbaren Früchte sind von einem rosa Pilz " - "überzogen. Niemand kann hier lange überleben. (%s)", curseid(c)); - } else { - sprintf(buf, - "Diese Region wurde von den Göttern verflucht. Das Meer ist eine ekelige Brühe, " - "braunschwarze, stinkende Gase steigen aus den unergründlichen Tiefen hervor, und " - "untote Seeungeheuer, Schiffe zerfressend und giftige grüne Galle " - "geifernd, sind der Schrecken aller Seeleute, die diese Gewässer durchqueren. " - "Niemand kann hier lange überleben. (%s)", curseid(c)); - } - return 1; -} - -/* C_GBDREAM, */ -static int -cinfo_dreamcurse(void * obj, typ_t typ, curse *c, int self) -{ - unused(self); - unused(typ); - unused(obj); - assert(typ == TYP_REGION); - - if (c->effect > 0){ - sprintf(buf, "Die Leute haben schöne Träume. (%s)", curseid(c)); - }else{ - sprintf(buf, "Albträume plagen die Leute. (%s)", curseid(c)); - } - - return 1; -} - -/* C_AURA */ -/* erhöht/senkt regeneration und maxaura um effect% */ -static int -cinfo_auraboost(void * obj, typ_t typ, curse *c, int self) -{ - unit *u; - unused(typ); - assert(typ == TYP_UNIT); - u = (unit *)obj; - - if (self){ - if (c->effect > 100){ - sprintf(buf, "%s fühlt sich von starken magischen Energien " - "durchströmt. (%s)", u->name, curseid(c)); - }else{ - sprintf(buf, "%s hat Schwierigkeiten seine magischen Energien " - "zu sammeln. (%s)", u->name, curseid(c)); - } - return 1; - } - return 0; -} /* C_BLESSEDHARVEST, */ static int cinfo_blessedharvest(void * obj, typ_t typ, curse *c, int self) @@ -817,30 +750,6 @@ cinfo_badlearn(void * obj, typ_t typ, curse *c, int self) return 1; } -/* C_SHIP_NODRIFT */ -static int -cinfo_shipnodrift(void * obj, typ_t typ, curse *c, int self) -{ - ship * sh; - unused(typ); - - assert(typ == TYP_SHIP); - sh = (ship*)obj; - - if (self){ - sprintf(buf, "%s ist mit guten Wind gesegnet", sh->name); - if (c->duration <= 2){ - scat(", doch der Zauber beginnt sich bereits aufzulösen"); - } - scat("."); - } else { - sprintf(buf, "Ein silberner Schimmer umgibt das Schiff."); - } - scat(" ("); - scat(itoa36(c->no)); - scat(")"); - return 1; -} /* C_DEPRESSION */ static int cinfo_depression(void * obj, typ_t typ, curse *c, int self) @@ -853,49 +762,6 @@ cinfo_depression(void * obj, typ_t typ, curse *c, int self) sprintf(buf, "Die Bauern sind unzufrieden. (%s)", curseid(c)); return 1; } -/* C_MAGICSTONE*/ -static int -cinfo_magicstone(void * obj, typ_t typ, curse *c, int self) -{ - building * b; - unused(typ); - - assert(typ == TYP_BUILDING); - b = (building*)obj; - - if (self){ - sprintf(buf, "Die Mauern von %s wirken, als wären sie " - "aus der Erde gewachsen. (%s)", b->name, curseid(c)); - return 1; - } - - return 0; -} -/* C_MAGICSTONE*/ -static int -cinfo_magicrunes(void * obj, typ_t typ, curse *c, int self) -{ - - if (typ == TYP_BUILDING){ - building * b; - b = (building*)obj; - if (self){ - sprintf(buf, "Auf den Mauern von %s erkennt man seltsame Runen. (%s)", - b->name, curseid(c)); - return 1; - } - } else if (typ == TYP_SHIP) { - ship *sh; - sh = (ship*)obj; - if (self){ - sprintf(buf, "Auf den Planken von %s erkennt man seltsame Runen. (%s)", - sh->name, curseid(c)); - return 1; - } - } - - return 0; -} /* C_GENEROUS */ static int @@ -950,47 +816,68 @@ cinfo_regconf(void * obj, typ_t typ, curse *c, int self) sprintf(buf, "Ein Schleier der Verwirrung liegt über der Region. (%s)", curseid(c)); - return 1; } -/* C_MAGICSTREET */ +/* C_RIOT */ static int -cinfo_magicstreet(void * obj, typ_t typ, curse *c, int self) +cinfo_riot(void * obj, typ_t typ, curse *c, int self) { unused(typ); unused(self); unused(obj); assert(typ == TYP_REGION); - - sprintf(buf, "Die Straßen sind erstaunlich trocken und gut begehbar"); - /* Warnung vor auflösung!*/ - if (c->duration <= 2){ - scat(", doch an manchen Stellen bilden sich wieder die erste Schlammlöcher"); - } - scat(". ("); - scat(itoa36(c->no)); - scat(")"); + sprintf(buf, "Die Region befindet sich in Aufruhr.(%s)", curseid(c)); return 1; } -/* C_SLAVE */ + +/* Building */ + +/* C_MAGICSTONE*/ static int -cinfo_slave(void * obj, typ_t typ, curse *c, int self) +cinfo_magicstone(void * obj, typ_t typ, curse *c, int self) { - unit *u; + building * b; unused(typ); - assert(typ == TYP_UNIT); - u = (unit *)obj; + assert(typ == TYP_BUILDING); + b = (building*)obj; if (self){ - sprintf(buf, "%s wird noch %d Woche%s unter unserem Bann stehen. (%s)", - u->name, c->duration, (c->duration == 1)? "":"n", curseid(c)); + sprintf(buf, "Die Mauern von %s wirken, als wären sie " + "aus der Erde gewachsen. (%s)", b->name, curseid(c)); return 1; } + return 0; } +/* C_MAGICSTONE*/ +static int +cinfo_magicrunes(void * obj, typ_t typ, curse *c, int self) +{ + + if (typ == TYP_BUILDING){ + building * b; + b = (building*)obj; + if (self){ + sprintf(buf, "Auf den Mauern von %s erkennt man seltsame Runen. (%s)", + b->name, curseid(c)); + return 1; + } + } else if (typ == TYP_SHIP) { + ship *sh; + sh = (ship*)obj; + if (self){ + sprintf(buf, "Auf den Planken von %s erkennt man seltsame Runen. (%s)", + sh->name, curseid(c)); + return 1; + } + } + + return 0; +} + /* C_DISORIENTATION */ static int cinfo_disorientation(void * obj, typ_t typ, curse *c, int self) @@ -1006,245 +893,6 @@ cinfo_disorientation(void * obj, typ_t typ, curse *c, int self) return 1; } -/* C_CALM */ -static int -cinfo_calm(void * obj, typ_t typ, curse *c, int self) -{ - unit *u; - const race * rc; - faction *f; - unused(typ); - - assert(typ == TYP_UNIT); - u = (unit *)obj; - if (c->magician){ - rc = c->magician->irace; - f = c->magician->faction; - if (self) { - sprintf(buf, "%s mag %s", u->name, factionname(f)); - } else { - sprintf(buf, "%s scheint %s zu mögen", u->name, LOC(f->locale, rc_name(rc, 1))); - } - scat(". ("); - scat(itoa36(c->no)); - scat(")"); - - return 1; - } - return 0; -} -/* C_SPEED */ -static int -cinfo_speed(void * obj, typ_t typ, curse *c, int self) -{ - unit *u; - curse_unit * cu; - unused(typ); - - assert(typ == TYP_UNIT); - u = (unit *)obj; - cu = (curse_unit *)c->data; - - if (self){ - sprintf(buf, "%d Person%s von %s %s noch %d Woche%s beschleunigt. (%s)", - cu->cursedmen, (cu->cursedmen == 1)? "":"en", u->name, - (cu->cursedmen == 1)? "ist":"sind", c->duration, - (c->duration == 1)? "":"n", - curseid(c)); - return 1; - } - return 0; -} -/* C_ORC */ -static int -cinfo_orc(void * obj, typ_t typ, curse *c, int self) -{ - unit *u; - unused(typ); - - assert(typ == TYP_UNIT); - u = (unit *)obj; - - if (self){ - sprintf(buf, "%s stürzt sich von einem amourösen Abenteuer ins " - "nächste. (%s)", u->name, curseid(c)); - return 1; - } - return 0; -} - -/* C_KAELTESCHUTZ */ -static int -cinfo_kaelteschutz(void * obj, typ_t typ, curse *c, int self) -{ - unit *u; - curse_unit * cu; - unused(typ); - - assert(typ == TYP_UNIT); - u = (unit *)obj; - cu = (curse_unit *)c->data; - - if (self){ - sprintf(buf, "%d Person%s von %s %s sich vor Kälte geschützt. (%s)", - cu->cursedmen, (cu->cursedmen == 1)? "":"en", u->name, - (cu->cursedmen == 1)? "fühlt":"fühlen", - curseid(c)); - return 1; - } - return 0; -} - -/* C_SPARKLE */ -static int -cinfo_sparkle(void * obj, typ_t typ, curse *c, int self) -{ - const char * effects[] = { - NULL, /* end grau*/ - "%s ist im Traum eine Fee erschienen.", - "%s wird von bösen Alpträumen geplagt.", - NULL, /* end traum */ - "%s wird von einem glitzernden Funkenregen umgeben.", - "Ein schimmernder Lichterkranz umgibt %s.", - NULL, /* end tybied */ - "Eine Melodie erklingt, und %s tanzt bis spät in die Nacht hinein.", - "%s findet eine kleine Flöte, die eine wundersame Melodie spielt.", - "Die Frauen des nahegelegenen Dorfes bewundern %s verstohlen.", - "Eine Gruppe vorbeiziehender Bergarbeiter rufen %s eindeutig Zweideutiges nach.", - NULL, /* end cerrdor */ - "%s bekommt von einer Schlange einen Apfel angeboten.", - "Ein Einhorn berührt %s mit seinem Horn und verschwindet kurz darauf im Unterholz.", - "Vogelzwitschern begleitet %s auf all seinen Wegen.", - "Leuchtende Blumen erblühen rund um das Lager von %s.", - NULL, /* end gwyrrd */ - "Über %s zieht eine Gruppe Geier ihre Kreise.", - "Der Kopf von %s hat sich in einen grinsenden Totenschädel verwandelt.", - "Ratten folgen %s auf Schritt und Tritt.", - "Pestbeulen befallen den Körper von %s.", - "Eine dunkle Fee erscheint %s im Schlaf. Sie ist von schauriger Schönheit.", - "Fäulnisgeruch dringt %s aus allen Körperöffnungen.", - NULL, /* end draig */ - }; - int m, begin=0, end=0; - unit *u; - unused(typ); - - assert(typ == TYP_UNIT); - u = (unit *)obj; - - if(!c->magician || !c->magician->faction) return 0; - - for(m=0;m!=c->magician->faction->magiegebiet;++m) { - while (effects[end]!=NULL) ++end; - begin = end+1; - end = begin; - } - - while (effects[end]!=NULL) ++end; - if (end==begin) return 0; - else sprintf(buf, effects[begin + c->effect % (end-begin)], u->name); - scat(" ("); - scat(itoa36(c->no)); - scat(")"); - - return 1; -} - -/* C_STRENGTH */ -static int -cinfo_strength(void * obj, typ_t typ, curse *c, int self) -{ - unused(c); - unused(typ); - - assert(typ == TYP_UNIT); - unused(obj); - - if (self){ - sprintf(buf, "Die Leute strotzen nur so vor Kraft. (%s)", - curseid(c)); - return 1; - } - return 0; -} -/* C_ALLSKILLS */ -static int -cinfo_allskills(void * obj, typ_t typ, curse *c, int self) -{ - unused(obj); - unused(typ); - unused(c); - - assert(typ == TYP_UNIT); - - if (self){ - sprintf(buf, "Wird von einem Alp geritten. (%s)", curseid(c)); - return 1; - } - return 0; -} -/* C_SKILL */ -static int -cinfo_skill(void * obj, typ_t typ, curse *c, int self) -{ - unit *u = (unit *)obj; - int sk = (int)c->data; - - unused(typ); - - if (self){ - sprintf(buf, "%s ist in %s ungewöhnlich ungeschickt. (%s)", u->name, - skillname((skill_t)sk, u->faction->locale), curseid(c)); - return 1; - } - return 0; -} -/* C_ITEMCLOAK */ -static int -cinfo_itemcloak(void * obj, typ_t typ, curse *c, int self) -{ - unit *u; - unused(typ); - - assert(typ == TYP_UNIT); - u = (unit *)obj; - - if (self) { - sprintf(buf, "Die Ausrüstung von %s scheint unsichtbar. (%s)", - u->name, curseid(c)); - return 1; - } - return 0; -} - -static int -cinfo_fumble(void * obj, typ_t typ, curse *c, int self) -{ - unit * u = (unit*)obj; - unused(typ); - - assert(typ == TYP_UNIT); - - if (self){ - sprintf(buf, "%s kann sich kaum konzentrieren.i (%s)", - u->name, curseid(c)); - return 1; - } - return 0; -} -/* C_RIOT */ -static int -cinfo_riot(void * obj, typ_t typ, curse *c, int self) -{ - unused(typ); - unused(self); - unused(obj); - - assert(typ == TYP_REGION); - sprintf(buf, "Die Region befindet sich in Aufruhr.(%s)", curseid(c)); - - return 1; -} static int read_skill(FILE * F, curse * c) diff --git a/src/common/spells/regioncurse.c b/src/common/spells/regioncurse.c new file mode 100644 index 000000000..230e8631e --- /dev/null +++ b/src/common/spells/regioncurse.c @@ -0,0 +1,125 @@ +/* vi: set ts=2: + * + * Eressea PB(E)M host Copyright (C) 1998-2000 + * Christian Schlittchen (corwin@amber.kn-bremen.de) + * Katja Zedel (katze@felidae.kn-bremen.de) + * Henning Peters (faroul@beyond.kn-bremen.de) + * Enno Rehling (enno@eressea-pbem.de) + * Ingo Wilken (Ingo.Wilken@informatik.uni-oldenburg.de) + * + * This program may not be used, modified or distributed without + * prior permission by the authors of Eressea. + */ + +#include +#include "eressea.h" +#include "regioncurse.h" + +/* kernel includes */ +#include "message.h" +#include "nrmessage.h" +#include "objtypes.h" +#include "curse.h" + +/* util includes */ +#include + +/* libc includes */ +#include +#include +#include + + +static int +cinfo_region(const locale * lang, void * obj, typ_t typ, curse *c, int self) +{ + message * msg; + + unused(typ); + unused(self); + unused(obj); + + assert(typ == TYP_REGION); + + msg = msg_message(mkname("curseinfo", c->type->cname), "id", c->no); + nr_render(msg, lang, buf, sizeof(buf), NULL); + msg_release(msg); + return 1; +} + +/* CurseInfo mit Spezialabfragen */ + +static int +cinfo_cursed_by_the_gods(void * obj, typ_t typ, curse *c, int self) +{ + region *r; + message * msg; + + unused(typ); + unused(self); + + assert(typ == TYP_REGION); + r = (region *)obj; + if (rterrain(r)!=T_OCEAN){ + msg = msg_message("curseinfo::godcurse", "id", c->no); + sprintf(buf, + "Diese Region wurde von den Göttern verflucht. Stinkende Nebel ziehen " + "über die tote Erde und furchtbare Kreaturen ziehen über das Land. Die Brunnen " + "sind vergiftet, und die wenigen essbaren Früchte sind von einem rosa Pilz " + "überzogen. Niemand kann hier lange überleben. (%s)", curseid(c)); + } else { + msg = msg_message("curseinfo::godcurseocean", "id", c->no); + sprintf(buf, + "Diese Region wurde von den Göttern verflucht. Das Meer ist eine ekelige Brühe, " + "braunschwarze, stinkende Gase steigen aus den unergründlichen Tiefen hervor, und " + "untote Seeungeheuer, Schiffe zerfressend und giftige grüne Galle " + "geifernd, sind der Schrecken aller Seeleute, die diese Gewässer durchqueren. " + "Niemand kann hier lange überleben. (%s)", curseid(c)); + } + nr_render(msg, lang, buf, sizeof(buf), NULL); + msg_release(msg); + + return 1; +} +/* C_GBDREAM, */ +static int +cinfo_dreamcurse(void * obj, typ_t typ, curse *c, int self) +{ + unused(self); + unused(typ); + unused(obj); + assert(typ == TYP_REGION); + + if (c->effect > 0){ + msg = msg_message("curseinfo::gooddream", "id", c->no); + sprintf(buf, "Die Leute haben schöne Träume. (%s)", curseid(c)); + }else{ + msg = msg_message("curseinfo::baddream", "id", c->no); + sprintf(buf, "Albträume plagen die Leute. (%s)", curseid(c)); + } + nr_render(msg, lang, buf, sizeof(buf), NULL); + msg_release(msg); + + return 1; +} +/* C_MAGICSTREET */ +static int +cinfo_magicstreet(void * obj, typ_t typ, curse *c, int self) +{ + unused(typ); + unused(self); + unused(obj); + + assert(typ == TYP_REGION); + + sprintf(buf, "Die Straßen sind erstaunlich trocken und gut begehbar"); + /* Warnung vor auflösung!*/ + if (c->duration <= 2){ + scat(", doch an manchen Stellen bilden sich wieder die erste Schlammlöcher"); + } + scat(". ("); + scat(itoa36(c->no)); + scat(")"); + + return 1; +} diff --git a/src/common/spells/regioncurse.h b/src/common/spells/regioncurse.h new file mode 100644 index 000000000..d8f2de3e5 --- /dev/null +++ b/src/common/spells/regioncurse.h @@ -0,0 +1,21 @@ +/* vi: set ts=2: + * + * Eressea PB(E)M host Copyright (C) 1998-2000 + * Christian Schlittchen (corwin@amber.kn-bremen.de) + * Katja Zedel (katze@felidae.kn-bremen.de) + * Henning Peters (faroul@beyond.kn-bremen.de) + * Enno Rehling (enno@eressea-pbem.de) + * Ingo Wilken (Ingo.Wilken@informatik.uni-oldenburg.de) + * + * This program may not be used, modified or distributed without + * prior permission by the authors of Eressea. + */ + +#ifndef _RCURSE_H +#define _RCURSE_H + +/* +static int cinfo_region(const locale * lang, void * obj, typ_t typ, curse *c, int self); +*/ + +#endif /* _RCURSE_H */ diff --git a/src/common/spells/shipcurse.c b/src/common/spells/shipcurse.c new file mode 100644 index 000000000..9d2fd5dc3 --- /dev/null +++ b/src/common/spells/shipcurse.c @@ -0,0 +1,100 @@ +/* vi: set ts=2: + * + * Eressea PB(E)M host Copyright (C) 1998-2000 + * Christian Schlittchen (corwin@amber.kn-bremen.de) + * Katja Zedel (katze@felidae.kn-bremen.de) + * Henning Peters (faroul@beyond.kn-bremen.de) + * Enno Rehling (enno@eressea-pbem.de) + * Ingo Wilken (Ingo.Wilken@informatik.uni-oldenburg.de) + * + * This program may not be used, modified or distributed without + * prior permission by the authors of Eressea. + */ + +#include +#include "eressea.h" +#include "regioncurse.h" + +/* kernel includes */ +#include "message.h" +#include "nrmessage.h" +#include "objtypes.h" +#include "curse.h" + +/* util includes */ +#include + +/* libc includes */ +#include +#include +#include + + +static int +cinfo_ship(const locale * lang, void * obj, typ_t typ, curse *c, int self) +{ + message * msg; + ship * sh; + + unused(typ); + + assert(typ == TYP_SHIP); + sh = (ship*)obj; + + if (self){ + msg = msg_message(mkname("curseinfo", c->type->cname), "id", c->no); + } else { + msg = msg_message(mkname("curseinfo", "shipunknown"), "id", c->no); + } + nr_render(msg, lang, buf, sizeof(buf), NULL); + msg_release(msg); + return 1; +} + +static int +cinfo_ship_onlyowner(const locale * lang, void * obj, typ_t typ, curse *c, int self) +{ + message * msg; + ship * sh; + + unused(typ); + + assert(typ == TYP_SHIP); + sh = (ship*)obj; + + if (self){ + msg = msg_message(mkname("curseinfo", c->type->cname), "id", c->no); + nr_render(msg, lang, buf, sizeof(buf), NULL); + msg_release(msg); + return 1; + } + return 0; +} + +/* CurseInfo mit Spezialabfragen */ + +/* C_SHIP_NODRIFT */ +static int +cinfo_shipnodrift(void * obj, typ_t typ, curse *c, int self) +{ + ship * sh; + unused(typ); + + assert(typ == TYP_SHIP); + sh = (ship*)obj; + + if (self){ + sprintf(buf, "%s ist mit guten Wind gesegnet", sh->name); + if (c->duration <= 2){ + scat(", doch der Zauber beginnt sich bereits aufzulösen"); + } + scat("."); + } else { + sprintf(buf, "Ein silberner Schimmer umgibt das Schiff."); + } + scat(" ("); + scat(itoa36(c->no)); + scat(")"); + return 1; +} + diff --git a/src/common/spells/unitcurse.c b/src/common/spells/unitcurse.c new file mode 100644 index 000000000..cef4d9289 --- /dev/null +++ b/src/common/spells/unitcurse.c @@ -0,0 +1,337 @@ +/* vi: set ts=2: + * + * Eressea PB(E)M host Copyright (C) 1998-2000 + * Christian Schlittchen (corwin@amber.kn-bremen.de) + * Katja Zedel (katze@felidae.kn-bremen.de) + * Henning Peters (faroul@beyond.kn-bremen.de) + * Enno Rehling (enno@eressea-pbem.de) + * Ingo Wilken (Ingo.Wilken@informatik.uni-oldenburg.de) + * + * This program may not be used, modified or distributed without + * prior permission by the authors of Eressea. + */ + +#include +#include "eressea.h" + +/* kernel includes */ +#include "message.h" +#include "nrmessage.h" +#include "objtypes.h" +#include "curse.h" + +/* util includes */ +#include + +/* libc includes */ +#include +#include +#include + +static int +cinfo_unit(const locale * lang, void * obj, typ_t typ, curse *c, int self) +{ + message * msg; + + unused(typ); + unused(self); + unused(obj); + + assert(typ == TYP_UNIT); + + msg = msg_message(mkname("curseinfo", c->type->cname), "id", c->no); + nr_render(msg, lang, buf, sizeof(buf), NULL); + msg_release(msg); + return 1; +} + +static int +cinfo_unit_onlyowner(const locale * lang, void * obj, typ_t typ, curse *c, int self) +{ + message * msg; + unit *u; + + unused(typ); + + assert(typ == TYP_UNIT); + u = (unit *)obj; + + if (self){ + msg = msg_message(mkname("curseinfo", c->type->cname), "id", c->no); + nr_render(msg, lang, buf, sizeof(buf), NULL); + msg_release(msg); + return 1; + } + return 0; +} + +/* CurseInfo mit Spezialabfragen */ + +/* C_AURA */ +/* erhöht/senkt regeneration und maxaura um effect% */ +static int +cinfo_auraboost(void * obj, typ_t typ, curse *c, int self) +{ + unit *u; + unused(typ); + assert(typ == TYP_UNIT); + u = (unit *)obj; + + if (self){ + if (c->effect > 100){ + sprintf(buf, "%s fühlt sich von starken magischen Energien " + "durchströmt. (%s)", u->name, curseid(c)); + }else{ + sprintf(buf, "%s hat Schwierigkeiten seine magischen Energien " + "zu sammeln. (%s)", u->name, curseid(c)); + } + return 1; + } + return 0; +} + +/* C_SLAVE */ +static int +cinfo_slave(void * obj, typ_t typ, curse *c, int self) +{ + unit *u; + unused(typ); + + assert(typ == TYP_UNIT); + u = (unit *)obj; + + if (self){ + sprintf(buf, "%s wird noch %d Woche%s unter unserem Bann stehen. (%s)", + u->name, c->duration, (c->duration == 1)? "":"n", curseid(c)); + return 1; + } + return 0; +} + +/* C_CALM */ +static int +cinfo_calm(void * obj, typ_t typ, curse *c, int self) +{ + unit *u; + const race * rc; + faction *f; + unused(typ); + + assert(typ == TYP_UNIT); + u = (unit *)obj; + if (c->magician){ + rc = c->magician->irace; + f = c->magician->faction; + if (self) { + sprintf(buf, "%s mag %s", u->name, factionname(f)); + } else { + sprintf(buf, "%s scheint %s zu mögen", u->name, LOC(f->locale, rc_name(rc, 1))); + } + scat(". ("); + scat(itoa36(c->no)); + scat(")"); + + return 1; + } + return 0; +} +/* C_SPEED */ +static int +cinfo_speed(void * obj, typ_t typ, curse *c, int self) +{ + unit *u; + curse_unit * cu; + unused(typ); + + assert(typ == TYP_UNIT); + u = (unit *)obj; + cu = (curse_unit *)c->data; + + if (self){ + sprintf(buf, "%d Person%s von %s %s noch %d Woche%s beschleunigt. (%s)", + cu->cursedmen, (cu->cursedmen == 1)? "":"en", u->name, + (cu->cursedmen == 1)? "ist":"sind", c->duration, + (c->duration == 1)? "":"n", + curseid(c)); + return 1; + } + return 0; +} +/* C_ORC */ +static int +cinfo_orc(void * obj, typ_t typ, curse *c, int self) +{ + unit *u; + unused(typ); + + assert(typ == TYP_UNIT); + u = (unit *)obj; + + if (self){ + sprintf(buf, "%s stürzt sich von einem amourösen Abenteuer ins " + "nächste. (%s)", u->name, curseid(c)); + return 1; + } + return 0; +} + +/* C_KAELTESCHUTZ */ +static int +cinfo_kaelteschutz(void * obj, typ_t typ, curse *c, int self) +{ + unit *u; + curse_unit * cu; + unused(typ); + + assert(typ == TYP_UNIT); + u = (unit *)obj; + cu = (curse_unit *)c->data; + + if (self){ + sprintf(buf, "%d Person%s von %s %s sich vor Kälte geschützt. (%s)", + cu->cursedmen, (cu->cursedmen == 1)? "":"en", u->name, + (cu->cursedmen == 1)? "fühlt":"fühlen", + curseid(c)); + return 1; + } + return 0; +} + +/* C_SPARKLE */ +static int +cinfo_sparkle(void * obj, typ_t typ, curse *c, int self) +{ + const char * effects[] = { + NULL, /* end grau*/ + "%s ist im Traum eine Fee erschienen.", + "%s wird von bösen Alpträumen geplagt.", + NULL, /* end traum */ + "%s wird von einem glitzernden Funkenregen umgeben.", + "Ein schimmernder Lichterkranz umgibt %s.", + NULL, /* end tybied */ + "Eine Melodie erklingt, und %s tanzt bis spät in die Nacht hinein.", + "%s findet eine kleine Flöte, die eine wundersame Melodie spielt.", + "Die Frauen des nahegelegenen Dorfes bewundern %s verstohlen.", + "Eine Gruppe vorbeiziehender Bergarbeiter rufen %s eindeutig Zweideutiges nach.", + NULL, /* end cerrdor */ + "%s bekommt von einer Schlange einen Apfel angeboten.", + "Ein Einhorn berührt %s mit seinem Horn und verschwindet kurz darauf im Unterholz.", + "Vogelzwitschern begleitet %s auf all seinen Wegen.", + "Leuchtende Blumen erblühen rund um das Lager von %s.", + NULL, /* end gwyrrd */ + "Über %s zieht eine Gruppe Geier ihre Kreise.", + "Der Kopf von %s hat sich in einen grinsenden Totenschädel verwandelt.", + "Ratten folgen %s auf Schritt und Tritt.", + "Pestbeulen befallen den Körper von %s.", + "Eine dunkle Fee erscheint %s im Schlaf. Sie ist von schauriger Schönheit.", + "Fäulnisgeruch dringt %s aus allen Körperöffnungen.", + NULL, /* end draig */ + }; + int m, begin=0, end=0; + unit *u; + unused(typ); + + assert(typ == TYP_UNIT); + u = (unit *)obj; + + if(!c->magician || !c->magician->faction) return 0; + + for(m=0;m!=c->magician->faction->magiegebiet;++m) { + while (effects[end]!=NULL) ++end; + begin = end+1; + end = begin; + } + + while (effects[end]!=NULL) ++end; + if (end==begin) return 0; + else sprintf(buf, effects[begin + c->effect % (end-begin)], u->name); + scat(" ("); + scat(itoa36(c->no)); + scat(")"); + + return 1; +} + +/* C_STRENGTH */ +static int +cinfo_strength(void * obj, typ_t typ, curse *c, int self) +{ + unused(c); + unused(typ); + + assert(typ == TYP_UNIT); + unused(obj); + + if (self){ + sprintf(buf, "Die Leute strotzen nur so vor Kraft. (%s)", + curseid(c)); + return 1; + } + return 0; +} +/* C_ALLSKILLS */ +static int +cinfo_allskills(void * obj, typ_t typ, curse *c, int self) +{ + unused(obj); + unused(typ); + unused(c); + + assert(typ == TYP_UNIT); + + if (self){ + sprintf(buf, "Wird von einem Alp geritten. (%s)", curseid(c)); + return 1; + } + return 0; +} +/* C_SKILL */ +static int +cinfo_skill(void * obj, typ_t typ, curse *c, int self) +{ + unit *u = (unit *)obj; + int sk = (int)c->data; + + unused(typ); + + if (self){ + sprintf(buf, "%s ist in %s ungewöhnlich ungeschickt. (%s)", u->name, + skillname((skill_t)sk, u->faction->locale), curseid(c)); + return 1; + } + return 0; +} +/* C_ITEMCLOAK */ +static int +cinfo_itemcloak(void * obj, typ_t typ, curse *c, int self) +{ + unit *u; + unused(typ); + + assert(typ == TYP_UNIT); + u = (unit *)obj; + + if (self) { + sprintf(buf, "Die Ausrüstung von %s scheint unsichtbar. (%s)", + u->name, curseid(c)); + return 1; + } + return 0; +} + +static int +cinfo_fumble(void * obj, typ_t typ, curse *c, int self) +{ + unit * u = (unit*)obj; + unused(typ); + + assert(typ == TYP_UNIT); + + if (self){ + sprintf(buf, "%s kann sich kaum konzentrieren.i (%s)", + u->name, curseid(c)); + return 1; + } + return 0; +} +