"Wirkungsdauer von Wasserelementar anzeigen"

curseinfos fuer schiffe u.a. repariert.
This commit is contained in:
Enno Rehling 2007-02-11 12:10:51 +00:00
parent c61249cea4
commit a80d69ceb5
4 changed files with 405 additions and 399 deletions

View File

@ -256,8 +256,7 @@ print_curses(FILE * F, const faction * viewer, const void * obj, typ_t typ)
} else { } else {
sprintf(buf, "an unknown curse lies on the region. (%s)", itoa36(c->no)); sprintf(buf, "an unknown curse lies on the region. (%s)", itoa36(c->no));
} }
} } else {
if (dh==1) {
if (!header) { if (!header) {
header = 1; header = 1;
fputs("EFFECTS\n", F); fputs("EFFECTS\n", F);

View File

@ -36,19 +36,23 @@
static int static int
cinfo_building(const struct locale * lang, const void * obj, typ_t typ, curse *c, int self) cinfo_building(const struct locale * lang, const void * obj, typ_t typ, curse *c, int self)
{ {
message * msg; message * msg;
unused(typ); unused(typ);
assert(typ == TYP_BUILDING); assert(typ == TYP_BUILDING);
if (self != 0){ /* owner or inside */ if (self != 0){ /* owner or inside */
msg = msg_message(mkname("curseinfo", c->type->cname), "id", c->no); msg = msg_message(mkname("curseinfo", c->type->cname), "id", c->no);
} else { /* outside */ } else { /* outside */
msg = msg_message(mkname("curseinfo", "buildingunknown"), "id", c->no); msg = msg_message(mkname("curseinfo", "buildingunknown"), "id", c->no);
} }
nr_render(msg, lang, buf, sizeof(buf), NULL); if (msg) {
msg_release(msg); nr_render(msg, lang, buf, sizeof(buf), NULL);
return 1; msg_release(msg);
return 1;
}
log_warning(("There is no curseinfo for %s.\n", c->type->cname));
return 0;
} }
/* CurseInfo mit Spezialabfragen */ /* CurseInfo mit Spezialabfragen */
@ -58,69 +62,69 @@ static int
cinfo_magicrunes(const struct locale* lang, const void * obj, typ_t typ, curse *c, int self) cinfo_magicrunes(const struct locale* lang, const void * obj, typ_t typ, curse *c, int self)
{ {
message * msg = NULL; message * msg = NULL;
if (typ == TYP_BUILDING){ if (typ == TYP_BUILDING){
building * b; building * b;
b = (building*)obj; b = (building*)obj;
if (self != 0) { if (self != 0) {
msg = msg_message(mkname("curseinfo", "magicrunes_building"), "building id", b, c->no); msg = msg_message(mkname("curseinfo", "magicrunes_building"), "building id", b, c->no);
} }
} else if (typ == TYP_SHIP) { } else if (typ == TYP_SHIP) {
ship *sh; ship *sh;
sh = (ship*)obj; sh = (ship*)obj;
if (self != 0){ if (self != 0){
msg = msg_message(mkname("curseinfo", "magicrunes_ship"), "ship id", sh, c->no); msg = msg_message(mkname("curseinfo", "magicrunes_ship"), "ship id", sh, c->no);
} }
} }
if (msg!=NULL) { if (msg!=NULL) {
nr_render(msg, lang, buf, sizeof(buf), NULL); nr_render(msg, lang, buf, sizeof(buf), NULL);
msg_release(msg); msg_release(msg);
return 1; return 1;
} }
return 0; return 0;
} }
static struct curse_type ct_magicrunes = { "magicrunes", static struct curse_type ct_magicrunes = { "magicrunes",
CURSETYP_NORM, 0, M_SUMEFFECT, CURSETYP_NORM, 0, M_SUMEFFECT,
"Dieser Zauber verstärkt die natürliche Widerstandskraft gegen eine " "Dieser Zauber verstärkt die natürliche Widerstandskraft gegen eine "
"Verzauberung.", "Verzauberung.",
cinfo_magicrunes cinfo_magicrunes
}; };
/* Heimstein-Zauber */ /* Heimstein-Zauber */
static struct curse_type ct_magicwalls = { "magicwalls", static struct curse_type ct_magicwalls = { "magicwalls",
CURSETYP_NORM, 0, NO_MERGE, CURSETYP_NORM, 0, NO_MERGE,
"Die Macht dieses Zaubers ist fast greifbar und tief in die Mauern " "Die Macht dieses Zaubers ist fast greifbar und tief in die Mauern "
"gebunden. Starke elementarmagische Kräfte sind zu spüren. " "gebunden. Starke elementarmagische Kräfte sind zu spüren. "
"Vieleicht wurde gar ein Erdelementar in diese Mauern gebannt. " "Vieleicht wurde gar ein Erdelementar in diese Mauern gebannt. "
"Ausser ebenso starkter Antimagie wird nichts je diese Mauern " "Ausser ebenso starkter Antimagie wird nichts je diese Mauern "
"gefährden können.", "gefährden können.",
cinfo_building cinfo_building
}; };
/* Feste Mauer - Präkampfzauber, wirkt nur 1 Runde */ /* Feste Mauer - Präkampfzauber, wirkt nur 1 Runde */
static struct curse_type ct_strongwall = { "strongwall", static struct curse_type ct_strongwall = { "strongwall",
CURSETYP_NORM, 0, NO_MERGE, CURSETYP_NORM, 0, NO_MERGE,
"", "",
NULL NULL
}; };
/* Ewige Mauern-Zauber */ /* Ewige Mauern-Zauber */
static struct curse_type ct_nocostbuilding = { "nocostbuilding", static struct curse_type ct_nocostbuilding = { "nocostbuilding",
CURSETYP_NORM, 0, NO_MERGE, CURSETYP_NORM, 0, NO_MERGE,
"Die Macht dieses Zaubers ist fast greifbar und tief in die Mauern " "Die Macht dieses Zaubers ist fast greifbar und tief in die Mauern "
"gebunden. Unbeeindruck vom Zahn der Zeit wird dieses Gebäude wohl " "gebunden. Unbeeindruck vom Zahn der Zeit wird dieses Gebäude wohl "
"auf Ewig stehen.", "auf Ewig stehen.",
cinfo_building cinfo_building
}; };
void void
register_buildingcurse(void) register_buildingcurse(void)
{ {
register_function((pf_generic)cinfo_magicrunes, "curseinfo::magicrunes"); register_function((pf_generic)cinfo_magicrunes, "curseinfo::magicrunes");
ct_register(&ct_magicwalls); ct_register(&ct_magicwalls);
ct_register(&ct_strongwall); ct_register(&ct_strongwall);
ct_register(&ct_magicrunes); ct_register(&ct_magicrunes);
ct_register(&ct_nocostbuilding); ct_register(&ct_nocostbuilding);
} }

View File

@ -35,83 +35,85 @@
int int
cinfo_ship(const struct locale * lang, const void * obj, typ_t typ, curse *c, int self) cinfo_ship(const struct locale * lang, const void * obj, typ_t typ, curse *c, int self)
{ {
message * msg; message * msg;
unused(typ); unused(typ);
unused(obj); unused(obj);
assert(typ == TYP_SHIP); assert(typ == TYP_SHIP);
if (self != 0){ /* owner or inside */ if (self != 0){ /* owner or inside */
msg = msg_message(mkname("curseinfo", c->type->cname), "id", c->no); msg = msg_message(mkname("curseinfo", c->type->cname), "id", c->no);
} else { } else {
msg = msg_message(mkname("curseinfo", "shipunknown"), "id", c->no); msg = msg_message(mkname("curseinfo", "shipunknown"), "id", c->no);
} }
nr_render(msg, lang, buf, sizeof(buf), NULL); if (msg) {
msg_release(msg); nr_render(msg, lang, buf, sizeof(buf), NULL);
return 1; msg_release(msg);
return 1;
}
log_warning(("There is no curseinfo for %s.\n", c->type->cname));
return 0;
} }
/* CurseInfo mit Spezialabfragen */ /* CurseInfo mit Spezialabfragen */
/* C_SHIP_NODRIFT */ /* C_SHIP_NODRIFT */
static int static int
cinfo_shipnodrift(const struct locale * lang, void * obj, typ_t typ, curse *c, int self) cinfo_shipnodrift(const struct locale * lang, const void * obj, typ_t typ, curse *c, int self)
{ {
ship * sh; ship * sh;
unused(typ); unused(typ);
assert(typ == TYP_SHIP); assert(typ == TYP_SHIP);
sh = (ship*)obj; sh = (ship*)obj;
if (self != 0){ if (self != 0){
sprintf(buf, "%s ist mit guten Wind gesegnet", sh->name); sprintf(buf, "%s ist mit guten Wind gesegnet", sh->name);
if (c->duration <= 2){ if (c->duration <= 2){
scat(", doch der Zauber beginnt sich bereits aufzulösen"); scat(", doch der Zauber beginnt sich bereits aufzulösen");
} }
scat("."); scat(".");
} else { } else {
sprintf(buf, "Ein silberner Schimmer umgibt das Schiff."); sprintf(buf, "Ein silberner Schimmer umgibt das Schiff.");
} }
scat(" ("); scat(" (");
scat(itoa36(c->no)); scat(itoa36(c->no));
scat(")"); scat(")");
return 1; return 1;
} }
static struct curse_type ct_stormwind = { "stormwind", static struct curse_type ct_stormwind = { "stormwind",
CURSETYP_NORM, 0, NO_MERGE, CURSETYP_NORM, 0, NO_MERGE,
"", "", cinfo_ship
NULL
}; };
static struct curse_type ct_flyingship = { "flyingship", static struct curse_type ct_flyingship = { "flyingship",
CURSETYP_NORM, 0, NO_MERGE, CURSETYP_NORM, 0, NO_MERGE,
"", "", cinfo_ship
NULL
}; };
static struct curse_type ct_nodrift = { "nodrift", static struct curse_type ct_nodrift = { "nodrift",
CURSETYP_NORM, 0, ( M_DURATION | M_VIGOUR ), CURSETYP_NORM, 0, ( M_DURATION | M_VIGOUR ),
"Der Zauber auf diesem Schiff ist aus den elementaren Magien der Luft " "Der Zauber auf diesem Schiff ist aus den elementaren Magien der Luft "
"und des Wassers gebunden. Der dem Wasser verbundene Teil des Zaubers " "und des Wassers gebunden. Der dem Wasser verbundene Teil des Zaubers "
"läßt es leichter durch die Wellen gleiten und der der Luft verbundene " "läßt es leichter durch die Wellen gleiten und der der Luft verbundene "
"Teil scheint es vor widrigen Winden zu schützen.", "Teil scheint es vor widrigen Winden zu schützen.",
cinfo_shipnodrift cinfo_shipnodrift
}; };
static struct curse_type ct_shipdisorientation = { "shipdisorientation", static struct curse_type ct_shipdisorientation = { "shipdisorientation",
CURSETYP_NORM, 0, NO_MERGE, CURSETYP_NORM, 0, NO_MERGE,
"Dieses Schiff hat sich verfahren." "Dieses Schiff hat sich verfahren.", cinfo_ship
}; };
static struct curse_type ct_shipspeedup = { "shipspeedup", static struct curse_type ct_shipspeedup = { "shipspeedup",
CURSETYP_NORM, 0, 0, CURSETYP_NORM, 0, 0,
NULL NULL, cinfo_ship
}; };
void void
register_shipcurse(void) register_shipcurse(void)
{ {
ct_register(&ct_stormwind); ct_register(&ct_stormwind);
ct_register(&ct_flyingship); ct_register(&ct_flyingship);
ct_register(&ct_nodrift); ct_register(&ct_nodrift);
ct_register(&ct_shipdisorientation); ct_register(&ct_shipdisorientation);
ct_register(&ct_shipspeedup); ct_register(&ct_shipspeedup);
} }

View File

@ -40,16 +40,37 @@
int int
cinfo_unit(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self) cinfo_unit(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
{ {
struct message * msg; struct message * msg;
unused(typ); unused(typ);
unused(self); unused(self);
unused(obj); unused(obj);
assert(typ == TYP_UNIT); assert(typ == TYP_UNIT);
msg = msg_message(mkname("curseinfo", c->type->cname), "id", c->no); msg = msg_message(mkname("curseinfo", c->type->cname), "id", c->no);
if (msg==NULL) { if (msg) {
nr_render(msg, lang, buf, sizeof(buf), NULL);
msg_release(msg);
return 1;
}
log_warning(("There is no curseinfo for %s.\n", c->type->cname));
return 0;
}
static int
cinfo_unit_onlyowner(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
{
message * msg;
struct unit *u;
unused(typ);
assert(typ == TYP_UNIT);
u = (struct unit *)obj;
if (self != 0){
msg = msg_message(mkname("curseinfo", c->type->cname), "id", c->no);
nr_render(msg, lang, buf, sizeof(buf), NULL); nr_render(msg, lang, buf, sizeof(buf), NULL);
msg_release(msg); msg_release(msg);
return 1; return 1;
@ -57,98 +78,78 @@ cinfo_unit(const struct locale * lang, const void * obj, typ_t typ, struct curse
return 0; return 0;
} }
static int
cinfo_unit_onlyowner(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
{
message * msg;
struct unit *u;
unused(typ);
assert(typ == TYP_UNIT);
u = (struct unit *)obj;
if (self != 0){
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;
}
/* ------------------------------------------------------------- */ /* ------------------------------------------------------------- */
/* /*
* C_AURA * C_AURA
*/ */
/* erhöht/senkt regeneration und maxaura um effect% */ /* erhöht/senkt regeneration und maxaura um effect% */
static int static int
cinfo_auraboost(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self) cinfo_auraboost(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
{ {
struct unit *u; struct unit *u;
unused(typ); unused(typ);
assert(typ == TYP_UNIT); assert(typ == TYP_UNIT);
u = (struct unit *)obj; u = (struct unit *)obj;
if (self != 0){ if (self != 0){
if (curse_geteffect(c) > 100){ if (curse_geteffect(c) > 100){
sprintf(buf, "%s fühlt sich von starken magischen Energien " sprintf(buf, "%s fühlt sich von starken magischen Energien "
"durchströmt. (%s)", u->name, curseid(c)); "durchströmt. (%s)", u->name, curseid(c));
}else{ }else{
sprintf(buf, "%s hat Schwierigkeiten seine magischen Energien " sprintf(buf, "%s hat Schwierigkeiten seine magischen Energien "
"zu sammeln. (%s)", u->name, curseid(c)); "zu sammeln. (%s)", u->name, curseid(c));
} }
return 1; return 1;
} }
return 0; return 0;
} }
static struct curse_type ct_auraboost = { static struct curse_type ct_auraboost = {
"auraboost", "auraboost",
CURSETYP_NORM, CURSE_SPREADMODULO, (NO_MERGE), CURSETYP_NORM, CURSE_SPREADMODULO, (NO_MERGE),
"Dieser Zauber greift irgendwie in die Verbindung zwischen Magier " "Dieser Zauber greift irgendwie in die Verbindung zwischen Magier "
"und Magischer Essenz ein. Mit positiver Ausrichtung kann er wohl " "und Magischer Essenz ein. Mit positiver Ausrichtung kann er wohl "
"wie ein Fokus für Aura wirken, jedoch genauso für das Gegenteil " "wie ein Fokus für Aura wirken, jedoch genauso für das Gegenteil "
"benutzt werden.", "benutzt werden.",
cinfo_auraboost cinfo_auraboost
}; };
/* Magic Boost - Gabe des Chaos */ /* Magic Boost - Gabe des Chaos */
static struct curse_type ct_magicboost = { static struct curse_type ct_magicboost = {
"magicboost", "magicboost",
CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN, CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN,
"", "",
NULL NULL
}; };
/* ------------------------------------------------------------- */ /* ------------------------------------------------------------- */
/* /*
* C_SLAVE * C_SLAVE
*/ */
static int static int
cinfo_slave(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self) cinfo_slave(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
{ {
unit *u; unit *u;
unused(typ); unused(typ);
assert(typ == TYP_UNIT); assert(typ == TYP_UNIT);
u = (unit *)obj; u = (unit *)obj;
if (self != 0){ if (self != 0){
sprintf(buf, "%s wird noch %d Woche%s unter unserem Bann stehen. (%s)", sprintf(buf, "%s wird noch %d Woche%s unter unserem Bann stehen. (%s)",
u->name, c->duration, (c->duration == 1)? "":"n", curseid(c)); u->name, c->duration, (c->duration == 1)? "":"n", curseid(c));
return 1; return 1;
} }
return 0; return 0;
} }
static struct curse_type ct_slavery = { "slavery", static struct curse_type ct_slavery = { "slavery",
CURSETYP_NORM, 0, NO_MERGE, CURSETYP_NORM, 0, NO_MERGE,
"Dieser mächtige Bann scheint die Einheit ihres freien Willens " "Dieser mächtige Bann scheint die Einheit ihres freien Willens "
"zu berauben. Solange der Zauber wirkt, wird sie nur den Befehlen " "zu berauben. Solange der Zauber wirkt, wird sie nur den Befehlen "
"ihres neuen Herrn gehorchen.", "ihres neuen Herrn gehorchen.",
cinfo_slave cinfo_slave
}; };
/* ------------------------------------------------------------- */ /* ------------------------------------------------------------- */
/* /*
* C_CALM * C_CALM
*/ */
static int static int
@ -172,48 +173,48 @@ cinfo_calm(const struct locale * lang, const void * obj, typ_t typ, struct curse
scat(". ("); scat(". (");
scat(itoa36(c->no)); scat(itoa36(c->no));
scat(")"); scat(")");
return 1; return 1;
} }
return 0; return 0;
} }
static struct curse_type ct_calmmonster = { "calmmonster", static struct curse_type ct_calmmonster = { "calmmonster",
CURSETYP_NORM, CURSE_SPREADNEVER, NO_MERGE, CURSETYP_NORM, CURSE_SPREADNEVER, NO_MERGE,
"Dieser Beeinflussungszauber scheint die Einheit einem ganz " "Dieser Beeinflussungszauber scheint die Einheit einem ganz "
"bestimmten Volk wohlgesonnen zu machen.", "bestimmten Volk wohlgesonnen zu machen.",
cinfo_calm cinfo_calm
}; };
/* ------------------------------------------------------------- */ /* ------------------------------------------------------------- */
/* /*
* C_SPEED * C_SPEED
*/ */
static int static int
cinfo_speed(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self) cinfo_speed(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
{ {
unit *u; unit *u;
curse_unit * cu; curse_unit * cu;
unused(typ); unused(typ);
assert(typ == TYP_UNIT); assert(typ == TYP_UNIT);
u = (unit *)obj; u = (unit *)obj;
cu = (curse_unit *)c->data.v; cu = (curse_unit *)c->data.v;
if (self != 0){ if (self != 0){
sprintf(buf, "%d Person%s von %s %s noch %d Woche%s beschleunigt. (%s)", sprintf(buf, "%d Person%s von %s %s noch %d Woche%s beschleunigt. (%s)",
cu->cursedmen, (cu->cursedmen == 1)? "":"en", u->name, cu->cursedmen, (cu->cursedmen == 1)? "":"en", u->name,
(cu->cursedmen == 1)? "ist":"sind", c->duration, (cu->cursedmen == 1)? "ist":"sind", c->duration,
(c->duration == 1)? "":"n", (c->duration == 1)? "":"n",
curseid(c)); curseid(c));
return 1; return 1;
} }
return 0; return 0;
} }
static struct curse_type ct_speed = { static struct curse_type ct_speed = {
"speed", "speed",
CURSETYP_UNIT, CURSE_SPREADNEVER, M_MEN, CURSETYP_UNIT, CURSE_SPREADNEVER, M_MEN,
"Diese Einheit bewegt sich doppelt so schnell.", "Diese Einheit bewegt sich doppelt so schnell.",
cinfo_speed cinfo_speed
}; };
/* ------------------------------------------------------------- */ /* ------------------------------------------------------------- */
@ -223,58 +224,58 @@ static struct curse_type ct_speed = {
static int static int
cinfo_orc(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self) cinfo_orc(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
{ {
unit *u; unit *u;
message * msg; message * msg;
unused(typ); unused(typ);
assert(typ == TYP_UNIT); assert(typ == TYP_UNIT);
u = (unit *)obj; u = (unit *)obj;
if (self != 0){ if (self != 0){
msg = msg_message(mkname("curseinfo", c->type->cname), "unit id", u, c->no); msg = msg_message(mkname("curseinfo", c->type->cname), "unit id", u, c->no);
nr_render(msg, lang, buf, sizeof(buf), NULL); nr_render(msg, lang, buf, sizeof(buf), NULL);
msg_release(msg); msg_release(msg);
return 1; return 1;
} }
return 0; return 0;
} }
static struct curse_type ct_orcish = { static struct curse_type ct_orcish = {
"orcish", "orcish",
CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN, CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN,
"Dieser Zauber scheint die Einheit zu 'orkisieren'. Wie bei Orks " "Dieser Zauber scheint die Einheit zu 'orkisieren'. Wie bei Orks "
"ist eine deutliche Neigung zur Fortpflanzung zu beobachten.", "ist eine deutliche Neigung zur Fortpflanzung zu beobachten.",
cinfo_orc cinfo_orc
}; };
/* ------------------------------------------------------------- */ /* ------------------------------------------------------------- */
/* /*
* C_KAELTESCHUTZ * C_KAELTESCHUTZ
*/ */
static int static int
cinfo_kaelteschutz(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self) cinfo_kaelteschutz(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
{ {
unit *u; unit *u;
curse_unit * cu; curse_unit * cu;
unused(typ); unused(typ);
assert(typ == TYP_UNIT); assert(typ == TYP_UNIT);
u = (unit *)obj; u = (unit *)obj;
cu = (curse_unit *)c->data.v; cu = (curse_unit *)c->data.v;
if (self != 0){ if (self != 0){
sprintf(buf, "%d Person%s von %s %s sich vor Kälte geschützt. (%s)", 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, (cu->cursedmen == 1)? "":"en", u->name,
(cu->cursedmen == 1)? "fühlt":"fühlen", (cu->cursedmen == 1)? "fühlt":"fühlen",
curseid(c)); curseid(c));
return 1; return 1;
} }
return 0; return 0;
} }
static struct curse_type ct_insectfur = { static struct curse_type ct_insectfur = {
"insectfur", "insectfur",
CURSETYP_UNIT, CURSE_SPREADMODULO, ( M_MEN | M_DURATION ), CURSETYP_UNIT, CURSE_SPREADMODULO, ( M_MEN | M_DURATION ),
"Dieser Zauber schützt vor den Auswirkungen der Kälte.", "Dieser Zauber schützt vor den Auswirkungen der Kälte.",
cinfo_kaelteschutz cinfo_kaelteschutz
}; };
/* ------------------------------------------------------------- */ /* ------------------------------------------------------------- */
@ -284,60 +285,60 @@ static struct curse_type ct_insectfur = {
static int static int
cinfo_sparkle(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self) cinfo_sparkle(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
{ {
const char * effects[] = { const char * effects[] = {
NULL, /* end grau*/ NULL, /* end grau*/
"%s ist im Traum eine Fee erschienen.", "%s ist im Traum eine Fee erschienen.",
"%s wird von bösen Alpträumen geplagt.", "%s wird von bösen Alpträumen geplagt.",
NULL, /* end traum */ NULL, /* end traum */
"%s wird von einem glitzernden Funkenregen umgeben.", "%s wird von einem glitzernden Funkenregen umgeben.",
"Ein schimmernder Lichterkranz umgibt %s.", "Ein schimmernder Lichterkranz umgibt %s.",
NULL, /* end tybied */ NULL, /* end tybied */
"Eine Melodie erklingt, und %s tanzt bis spät in die Nacht hinein.", "Eine Melodie erklingt, und %s tanzt bis spät in die Nacht hinein.",
"%s findet eine kleine Flöte, die eine wundersame Melodie spielt.", "%s findet eine kleine Flöte, die eine wundersame Melodie spielt.",
"Die Frauen des nahegelegenen Dorfes bewundern %s verstohlen.", "Die Frauen des nahegelegenen Dorfes bewundern %s verstohlen.",
"Eine Gruppe vorbeiziehender Bergarbeiter rufen %s eindeutig Zweideutiges nach.", "Eine Gruppe vorbeiziehender Bergarbeiter rufen %s eindeutig Zweideutiges nach.",
NULL, /* end cerrdor */ NULL, /* end cerrdor */
"%s bekommt von einer Schlange einen Apfel angeboten.", "%s bekommt von einer Schlange einen Apfel angeboten.",
"Ein Einhorn berührt %s mit seinem Horn und verschwindet kurz darauf im Unterholz.", "Ein Einhorn berührt %s mit seinem Horn und verschwindet kurz darauf im Unterholz.",
"Vogelzwitschern begleitet %s auf all seinen Wegen.", "Vogelzwitschern begleitet %s auf all seinen Wegen.",
"Leuchtende Blumen erblühen rund um das Lager von %s.", "Leuchtende Blumen erblühen rund um das Lager von %s.",
NULL, /* end gwyrrd */ NULL, /* end gwyrrd */
"Über %s zieht eine Gruppe Geier ihre Kreise.", "Über %s zieht eine Gruppe Geier ihre Kreise.",
"Der Kopf von %s hat sich in einen grinsenden Totenschädel verwandelt.", "Der Kopf von %s hat sich in einen grinsenden Totenschädel verwandelt.",
"Ratten folgen %s auf Schritt und Tritt.", "Ratten folgen %s auf Schritt und Tritt.",
"Pestbeulen befallen den Körper von %s.", "Pestbeulen befallen den Körper von %s.",
"Eine dunkle Fee erscheint %s im Schlaf. Sie ist von schauriger Schönheit.", "Eine dunkle Fee erscheint %s im Schlaf. Sie ist von schauriger Schönheit.",
"Fäulnisgeruch dringt %s aus allen Körperöffnungen.", "Fäulnisgeruch dringt %s aus allen Körperöffnungen.",
NULL, /* end draig */ NULL, /* end draig */
}; };
int m, begin=0, end=0; int m, begin=0, end=0;
unit *u; unit *u;
unused(typ); unused(typ);
assert(typ == TYP_UNIT); assert(typ == TYP_UNIT);
u = (unit *)obj; u = (unit *)obj;
if(!c->magician || !c->magician->faction) return 0; if(!c->magician || !c->magician->faction) return 0;
for(m=0;m!=c->magician->faction->magiegebiet;++m) { for(m=0;m!=c->magician->faction->magiegebiet;++m) {
while (effects[end]!=NULL) ++end; while (effects[end]!=NULL) ++end;
begin = end+1; begin = end+1;
end = begin; end = begin;
} }
while (effects[end]!=NULL) ++end; while (effects[end]!=NULL) ++end;
if (end==begin) return 0; if (end==begin) return 0;
else sprintf(buf, effects[begin + curse_geteffect(c) % (end-begin)], u->name); else sprintf(buf, effects[begin + curse_geteffect(c) % (end-begin)], u->name);
scat(" ("); scat(" (");
scat(itoa36(c->no)); scat(itoa36(c->no));
scat(")"); scat(")");
return 1; return 1;
} }
static struct curse_type ct_sparkle = { "sparkle", static struct curse_type ct_sparkle = { "sparkle",
CURSETYP_UNIT, CURSE_SPREADMODULO, ( M_MEN | M_DURATION ), CURSETYP_UNIT, CURSE_SPREADMODULO, ( M_MEN | M_DURATION ),
"Dieser Zauber ist einer der ersten, den junge Magier in der Schule lernen.", "Dieser Zauber ist einer der ersten, den junge Magier in der Schule lernen.",
cinfo_sparkle cinfo_sparkle
}; };
/* ------------------------------------------------------------- */ /* ------------------------------------------------------------- */
@ -347,24 +348,24 @@ static struct curse_type ct_sparkle = { "sparkle",
static int static int
cinfo_strength(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self) cinfo_strength(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
{ {
unused(c); unused(c);
unused(typ); unused(typ);
assert(typ == TYP_UNIT); assert(typ == TYP_UNIT);
unused(obj); unused(obj);
if (self != 0){ if (self != 0){
sprintf(buf, "Die Leute strotzen nur so vor Kraft. (%s)", sprintf(buf, "Die Leute strotzen nur so vor Kraft. (%s)",
curseid(c)); curseid(c));
return 1; return 1;
} }
return 0; return 0;
} }
static struct curse_type ct_strength = { "strength", static struct curse_type ct_strength = { "strength",
CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN, CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN,
"Dieser Zauber vermehrt die Stärke der verzauberten Personen um ein " "Dieser Zauber vermehrt die Stärke der verzauberten Personen um ein "
"vielfaches.", "vielfaches.",
cinfo_strength cinfo_strength
}; };
/* ------------------------------------------------------------- */ /* ------------------------------------------------------------- */
@ -374,23 +375,23 @@ static struct curse_type ct_strength = { "strength",
static int static int
cinfo_allskills(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self) cinfo_allskills(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
{ {
unused(obj); unused(obj);
unused(typ); unused(typ);
unused(c); unused(c);
assert(typ == TYP_UNIT); assert(typ == TYP_UNIT);
if (self != 0){ if (self != 0){
sprintf(buf, "Wird von einem Alp geritten. (%s)", curseid(c)); sprintf(buf, "Wird von einem Alp geritten. (%s)", curseid(c));
return 1; return 1;
} }
return 0; return 0;
} }
static struct curse_type ct_worse = { static struct curse_type ct_worse = {
"worse", "worse",
CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN, CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN,
"", "",
cinfo_allskills cinfo_allskills
}; };
/* ------------------------------------------------------------- */ /* ------------------------------------------------------------- */
@ -401,61 +402,61 @@ static struct curse_type ct_worse = {
static int static int
cinfo_itemcloak(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self) cinfo_itemcloak(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
{ {
unit *u; unit *u;
unused(typ); unused(typ);
assert(typ == TYP_UNIT); assert(typ == TYP_UNIT);
u = (unit *)obj; u = (unit *)obj;
if (self != 0) { if (self != 0) {
sprintf(buf, "Die Ausrüstung von %s scheint unsichtbar. (%s)", sprintf(buf, "Die Ausrüstung von %s scheint unsichtbar. (%s)",
u->name, curseid(c)); u->name, curseid(c));
return 1; return 1;
} }
return 0; return 0;
} }
static struct curse_type ct_itemcloak = { static struct curse_type ct_itemcloak = {
"itemcloak", "itemcloak",
CURSETYP_UNIT, CURSE_SPREADNEVER, M_DURATION, CURSETYP_UNIT, CURSE_SPREADNEVER, M_DURATION,
"Dieser Zauber macht die Ausrüstung unsichtbar.", "Dieser Zauber macht die Ausrüstung unsichtbar.",
cinfo_itemcloak cinfo_itemcloak
}; };
/* ------------------------------------------------------------- */ /* ------------------------------------------------------------- */
static int static int
cinfo_fumble(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self) cinfo_fumble(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
{ {
unit * u = (unit*)obj; unit * u = (unit*)obj;
unused(typ); unused(typ);
assert(typ == TYP_UNIT); assert(typ == TYP_UNIT);
if (self != 0){ if (self != 0){
sprintf(buf, "%s kann sich kaum konzentrieren. (%s)", sprintf(buf, "%s kann sich kaum konzentrieren. (%s)",
u->name, curseid(c)); u->name, curseid(c));
return 1; return 1;
} }
return 0; return 0;
} }
static struct curse_type ct_fumble = { static struct curse_type ct_fumble = {
"fumble", "fumble",
CURSETYP_NORM, CURSE_SPREADNEVER, NO_MERGE, CURSETYP_NORM, CURSE_SPREADNEVER, NO_MERGE,
"Eine Wolke negativer Energie umgibt die Einheit.", "Eine Wolke negativer Energie umgibt die Einheit.",
cinfo_fumble cinfo_fumble
}; };
/* ------------------------------------------------------------- */ /* ------------------------------------------------------------- */
static struct curse_type ct_oldrace = { "oldrace", static struct curse_type ct_oldrace = { "oldrace",
CURSETYP_NORM, CURSE_SPREADALWAYS, NO_MERGE, CURSETYP_NORM, CURSE_SPREADALWAYS, NO_MERGE,
"", "",
NULL NULL
}; };
static struct curse_type ct_magicresistance = { "magicresistance", static struct curse_type ct_magicresistance = { "magicresistance",
CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN, CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN,
"Dieser Zauber verstärkt die natürliche Widerstandskraft gegen eine " "Dieser Zauber verstärkt die natürliche Widerstandskraft gegen eine "
"Verzauberung.", "Verzauberung.",
NULL NULL
}; };
@ -467,80 +468,80 @@ static struct curse_type ct_magicresistance = { "magicresistance",
static int static int
read_skill(FILE * F, curse * c) read_skill(FILE * F, curse * c)
{ {
int skill; int skill;
if (global.data_version<CURSETYPE_VERSION) { if (global.data_version<CURSETYPE_VERSION) {
int men; int men;
fscanf(F, "%d %d", &skill, &men); fscanf(F, "%d %d", &skill, &men);
} else { } else {
fscanf(F, "%d", &skill); fscanf(F, "%d", &skill);
} }
c->data.i = skill; c->data.i = skill;
return 0; return 0;
} }
static int static int
write_skill(FILE * F, const curse * c) write_skill(FILE * F, const curse * c)
{ {
fprintf(F, "%d ", c->data.i); fprintf(F, "%d ", c->data.i);
return 0; return 0;
} }
static int static int
cinfo_skill(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self) cinfo_skill(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
{ {
unit *u = (unit *)obj; unit *u = (unit *)obj;
int sk = c->data.i; int sk = c->data.i;
unused(typ); unused(typ);
if (self != 0){ if (self != 0){
sprintf(buf, "%s ist in %s ungewöhnlich ungeschickt. (%s)", u->name, sprintf(buf, "%s ist in %s ungewöhnlich ungeschickt. (%s)", u->name,
skillname((skill_t)sk, u->faction->locale), curseid(c)); skillname((skill_t)sk, u->faction->locale), curseid(c));
return 1; return 1;
} }
return 0; return 0;
} }
static struct curse_type ct_skillmod = { static struct curse_type ct_skillmod = {
"skillmod", "skillmod",
CURSETYP_NORM, CURSE_SPREADMODULO, M_MEN, CURSETYP_NORM, CURSE_SPREADMODULO, M_MEN,
"", "",
cinfo_skill, cinfo_skill,
NULL, NULL,
read_skill, write_skill read_skill, write_skill
}; };
/* ------------------------------------------------------------- */ /* ------------------------------------------------------------- */
void void
register_unitcurse(void) register_unitcurse(void)
{ {
register_function((pf_generic)cinfo_unit_onlyowner, "curseinfo::unit_onlyowner"); register_function((pf_generic)cinfo_unit_onlyowner, "curseinfo::unit_onlyowner");
register_function((pf_generic)cinfo_auraboost, "curseinfo::auraboost"); register_function((pf_generic)cinfo_auraboost, "curseinfo::auraboost");
register_function((pf_generic)cinfo_slave, "curseinfo::slave"); register_function((pf_generic)cinfo_slave, "curseinfo::slave");
register_function((pf_generic)cinfo_calm, "curseinfo::calm"); register_function((pf_generic)cinfo_calm, "curseinfo::calm");
register_function((pf_generic)cinfo_speed, "curseinfo::speed"); register_function((pf_generic)cinfo_speed, "curseinfo::speed");
register_function((pf_generic)cinfo_orc, "curseinfo::orc"); register_function((pf_generic)cinfo_orc, "curseinfo::orc");
register_function((pf_generic)cinfo_kaelteschutz, "curseinfo::kaelteschutz"); register_function((pf_generic)cinfo_kaelteschutz, "curseinfo::kaelteschutz");
register_function((pf_generic)cinfo_sparkle, "curseinfo::sparkle"); register_function((pf_generic)cinfo_sparkle, "curseinfo::sparkle");
register_function((pf_generic)cinfo_strength, "curseinfo::strength"); register_function((pf_generic)cinfo_strength, "curseinfo::strength");
register_function((pf_generic)cinfo_allskills, "curseinfo::allskills"); register_function((pf_generic)cinfo_allskills, "curseinfo::allskills");
register_function((pf_generic)cinfo_skill, "curseinfo::skill"); register_function((pf_generic)cinfo_skill, "curseinfo::skill");
register_function((pf_generic)cinfo_itemcloak, "curseinfo::itemcloak"); register_function((pf_generic)cinfo_itemcloak, "curseinfo::itemcloak");
register_function((pf_generic)cinfo_fumble, "curseinfo::fumble"); register_function((pf_generic)cinfo_fumble, "curseinfo::fumble");
ct_register(&ct_auraboost); ct_register(&ct_auraboost);
ct_register(&ct_magicboost); ct_register(&ct_magicboost);
ct_register(&ct_slavery); ct_register(&ct_slavery);
ct_register(&ct_calmmonster); ct_register(&ct_calmmonster);
ct_register(&ct_speed); ct_register(&ct_speed);
ct_register(&ct_orcish); ct_register(&ct_orcish);
ct_register(&ct_insectfur); ct_register(&ct_insectfur);
ct_register(&ct_sparkle); ct_register(&ct_sparkle);
ct_register(&ct_strength); ct_register(&ct_strength);
ct_register(&ct_worse); ct_register(&ct_worse);
ct_register(&ct_skillmod); ct_register(&ct_skillmod);
ct_register(&ct_itemcloak); ct_register(&ct_itemcloak);
ct_register(&ct_fumble); ct_register(&ct_fumble);
ct_register(&ct_oldrace); ct_register(&ct_oldrace);
ct_register(&ct_magicresistance); ct_register(&ct_magicresistance);
} }