"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 {
sprintf(buf, "an unknown curse lies on the region. (%s)", itoa36(c->no));
}
}
if (dh==1) {
} else {
if (!header) {
header = 1;
fputs("EFFECTS\n", F);

View File

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

View File

@ -35,83 +35,85 @@
int
cinfo_ship(const struct locale * lang, const void * obj, typ_t typ, curse *c, int self)
{
message * msg;
message * msg;
unused(typ);
unused(obj);
assert(typ == TYP_SHIP);
unused(typ);
unused(obj);
assert(typ == TYP_SHIP);
if (self != 0){ /* owner or inside */
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;
if (self != 0){ /* owner or inside */
msg = msg_message(mkname("curseinfo", c->type->cname), "id", c->no);
} else {
msg = msg_message(mkname("curseinfo", "shipunknown"), "id", c->no);
}
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;
}
/* CurseInfo mit Spezialabfragen */
/* C_SHIP_NODRIFT */
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;
unused(typ);
ship * sh;
unused(typ);
assert(typ == TYP_SHIP);
sh = (ship*)obj;
assert(typ == TYP_SHIP);
sh = (ship*)obj;
if (self != 0){
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;
if (self != 0){
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;
}
static struct curse_type ct_stormwind = { "stormwind",
CURSETYP_NORM, 0, NO_MERGE,
"",
NULL
CURSETYP_NORM, 0, NO_MERGE,
"", cinfo_ship
};
static struct curse_type ct_flyingship = { "flyingship",
CURSETYP_NORM, 0, NO_MERGE,
"",
NULL
CURSETYP_NORM, 0, NO_MERGE,
"", cinfo_ship
};
static struct curse_type ct_nodrift = { "nodrift",
CURSETYP_NORM, 0, ( M_DURATION | M_VIGOUR ),
"Der Zauber auf diesem Schiff ist aus den elementaren Magien der Luft "
"und des Wassers gebunden. Der dem Wasser verbundene Teil des Zaubers "
"läßt es leichter durch die Wellen gleiten und der der Luft verbundene "
"Teil scheint es vor widrigen Winden zu schützen.",
CURSETYP_NORM, 0, ( M_DURATION | M_VIGOUR ),
"Der Zauber auf diesem Schiff ist aus den elementaren Magien der Luft "
"und des Wassers gebunden. Der dem Wasser verbundene Teil des Zaubers "
"läßt es leichter durch die Wellen gleiten und der der Luft verbundene "
"Teil scheint es vor widrigen Winden zu schützen.",
cinfo_shipnodrift
};
static struct curse_type ct_shipdisorientation = { "shipdisorientation",
CURSETYP_NORM, 0, NO_MERGE,
"Dieses Schiff hat sich verfahren."
CURSETYP_NORM, 0, NO_MERGE,
"Dieses Schiff hat sich verfahren.", cinfo_ship
};
static struct curse_type ct_shipspeedup = { "shipspeedup",
CURSETYP_NORM, 0, 0,
NULL
CURSETYP_NORM, 0, 0,
NULL, cinfo_ship
};
void
register_shipcurse(void)
{
ct_register(&ct_stormwind);
ct_register(&ct_flyingship);
ct_register(&ct_nodrift);
ct_register(&ct_shipdisorientation);
ct_register(&ct_shipspeedup);
ct_register(&ct_stormwind);
ct_register(&ct_flyingship);
ct_register(&ct_nodrift);
ct_register(&ct_shipdisorientation);
ct_register(&ct_shipspeedup);
}

View File

@ -40,41 +40,42 @@
int
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(self);
unused(obj);
unused(typ);
unused(self);
unused(obj);
assert(typ == TYP_UNIT);
assert(typ == TYP_UNIT);
msg = msg_message(mkname("curseinfo", c->type->cname), "id", c->no);
if (msg==NULL) {
msg = msg_message(mkname("curseinfo", c->type->cname), "id", c->no);
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;
message * msg;
struct unit *u;
unused(typ);
unused(typ);
assert(typ == TYP_UNIT);
u = (struct unit *)obj;
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;
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;
}
/* ------------------------------------------------------------- */
@ -85,38 +86,38 @@ cinfo_unit_onlyowner(const struct locale * lang, const void * obj, typ_t typ, st
static int
cinfo_auraboost(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
{
struct unit *u;
unused(typ);
assert(typ == TYP_UNIT);
u = (struct unit *)obj;
struct unit *u;
unused(typ);
assert(typ == TYP_UNIT);
u = (struct unit *)obj;
if (self != 0){
if (curse_geteffect(c) > 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;
if (self != 0){
if (curse_geteffect(c) > 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;
}
static struct curse_type ct_auraboost = {
"auraboost",
CURSETYP_NORM, CURSE_SPREADMODULO, (NO_MERGE),
"Dieser Zauber greift irgendwie in die Verbindung zwischen Magier "
"und Magischer Essenz ein. Mit positiver Ausrichtung kann er wohl "
"wie ein Fokus für Aura wirken, jedoch genauso für das Gegenteil "
"benutzt werden.",
cinfo_auraboost
"auraboost",
CURSETYP_NORM, CURSE_SPREADMODULO, (NO_MERGE),
"Dieser Zauber greift irgendwie in die Verbindung zwischen Magier "
"und Magischer Essenz ein. Mit positiver Ausrichtung kann er wohl "
"wie ein Fokus für Aura wirken, jedoch genauso für das Gegenteil "
"benutzt werden.",
cinfo_auraboost
};
/* Magic Boost - Gabe des Chaos */
static struct curse_type ct_magicboost = {
"magicboost",
CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN,
"",
NULL
"magicboost",
CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN,
"",
NULL
};
/* ------------------------------------------------------------- */
@ -126,25 +127,25 @@ static struct curse_type ct_magicboost = {
static int
cinfo_slave(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
{
unit *u;
unused(typ);
unit *u;
unused(typ);
assert(typ == TYP_UNIT);
u = (unit *)obj;
assert(typ == TYP_UNIT);
u = (unit *)obj;
if (self != 0){
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;
if (self != 0){
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;
}
static struct curse_type ct_slavery = { "slavery",
CURSETYP_NORM, 0, NO_MERGE,
"Dieser mächtige Bann scheint die Einheit ihres freien Willens "
"zu berauben. Solange der Zauber wirkt, wird sie nur den Befehlen "
"ihres neuen Herrn gehorchen.",
cinfo_slave
CURSETYP_NORM, 0, NO_MERGE,
"Dieser mächtige Bann scheint die Einheit ihres freien Willens "
"zu berauben. Solange der Zauber wirkt, wird sie nur den Befehlen "
"ihres neuen Herrn gehorchen.",
cinfo_slave
};
/* ------------------------------------------------------------- */
@ -178,10 +179,10 @@ cinfo_calm(const struct locale * lang, const void * obj, typ_t typ, struct curse
return 0;
}
static struct curse_type ct_calmmonster = { "calmmonster",
CURSETYP_NORM, CURSE_SPREADNEVER, NO_MERGE,
"Dieser Beeinflussungszauber scheint die Einheit einem ganz "
"bestimmten Volk wohlgesonnen zu machen.",
cinfo_calm
CURSETYP_NORM, CURSE_SPREADNEVER, NO_MERGE,
"Dieser Beeinflussungszauber scheint die Einheit einem ganz "
"bestimmten Volk wohlgesonnen zu machen.",
cinfo_calm
};
/* ------------------------------------------------------------- */
@ -191,29 +192,29 @@ static struct curse_type ct_calmmonster = { "calmmonster",
static int
cinfo_speed(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
{
unit *u;
curse_unit * cu;
unused(typ);
unit *u;
curse_unit * cu;
unused(typ);
assert(typ == TYP_UNIT);
u = (unit *)obj;
cu = (curse_unit *)c->data.v;
assert(typ == TYP_UNIT);
u = (unit *)obj;
cu = (curse_unit *)c->data.v;
if (self != 0){
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;
if (self != 0){
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;
}
static struct curse_type ct_speed = {
"speed",
CURSETYP_UNIT, CURSE_SPREADNEVER, M_MEN,
"Diese Einheit bewegt sich doppelt so schnell.",
cinfo_speed
"speed",
CURSETYP_UNIT, CURSE_SPREADNEVER, M_MEN,
"Diese Einheit bewegt sich doppelt so schnell.",
cinfo_speed
};
/* ------------------------------------------------------------- */
@ -223,27 +224,27 @@ static struct curse_type ct_speed = {
static int
cinfo_orc(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
{
unit *u;
message * msg;
unused(typ);
unit *u;
message * msg;
unused(typ);
assert(typ == TYP_UNIT);
u = (unit *)obj;
assert(typ == TYP_UNIT);
u = (unit *)obj;
if (self != 0){
msg = msg_message(mkname("curseinfo", c->type->cname), "unit id", u, c->no);
nr_render(msg, lang, buf, sizeof(buf), NULL);
msg_release(msg);
return 1;
}
return 0;
if (self != 0){
msg = msg_message(mkname("curseinfo", c->type->cname), "unit id", u, c->no);
nr_render(msg, lang, buf, sizeof(buf), NULL);
msg_release(msg);
return 1;
}
return 0;
}
static struct curse_type ct_orcish = {
"orcish",
CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN,
"Dieser Zauber scheint die Einheit zu 'orkisieren'. Wie bei Orks "
"ist eine deutliche Neigung zur Fortpflanzung zu beobachten.",
cinfo_orc
"orcish",
CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN,
"Dieser Zauber scheint die Einheit zu 'orkisieren'. Wie bei Orks "
"ist eine deutliche Neigung zur Fortpflanzung zu beobachten.",
cinfo_orc
};
/* ------------------------------------------------------------- */
@ -253,28 +254,28 @@ static struct curse_type ct_orcish = {
static int
cinfo_kaelteschutz(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
{
unit *u;
curse_unit * cu;
unused(typ);
unit *u;
curse_unit * cu;
unused(typ);
assert(typ == TYP_UNIT);
u = (unit *)obj;
cu = (curse_unit *)c->data.v;
assert(typ == TYP_UNIT);
u = (unit *)obj;
cu = (curse_unit *)c->data.v;
if (self != 0){
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;
if (self != 0){
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;
}
static struct curse_type ct_insectfur = {
"insectfur",
CURSETYP_UNIT, CURSE_SPREADMODULO, ( M_MEN | M_DURATION ),
"Dieser Zauber schützt vor den Auswirkungen der Kälte.",
cinfo_kaelteschutz
"insectfur",
CURSETYP_UNIT, CURSE_SPREADMODULO, ( M_MEN | M_DURATION ),
"Dieser Zauber schützt vor den Auswirkungen der Kälte.",
cinfo_kaelteschutz
};
/* ------------------------------------------------------------- */
@ -284,60 +285,60 @@ static struct curse_type ct_insectfur = {
static int
cinfo_sparkle(const struct locale * lang, const void * obj, typ_t typ, struct 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);
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;
assert(typ == TYP_UNIT);
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) {
while (effects[end]!=NULL) ++end;
begin = end+1;
end = begin;
}
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 + curse_geteffect(c) % (end-begin)], u->name);
scat(" (");
scat(itoa36(c->no));
scat(")");
while (effects[end]!=NULL) ++end;
if (end==begin) return 0;
else sprintf(buf, effects[begin + curse_geteffect(c) % (end-begin)], u->name);
scat(" (");
scat(itoa36(c->no));
scat(")");
return 1;
return 1;
}
static struct curse_type ct_sparkle = { "sparkle",
CURSETYP_UNIT, CURSE_SPREADMODULO, ( M_MEN | M_DURATION ),
"Dieser Zauber ist einer der ersten, den junge Magier in der Schule lernen.",
cinfo_sparkle
CURSETYP_UNIT, CURSE_SPREADMODULO, ( M_MEN | M_DURATION ),
"Dieser Zauber ist einer der ersten, den junge Magier in der Schule lernen.",
cinfo_sparkle
};
/* ------------------------------------------------------------- */
@ -347,24 +348,24 @@ static struct curse_type ct_sparkle = { "sparkle",
static int
cinfo_strength(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
{
unused(c);
unused(typ);
unused(c);
unused(typ);
assert(typ == TYP_UNIT);
unused(obj);
assert(typ == TYP_UNIT);
unused(obj);
if (self != 0){
sprintf(buf, "Die Leute strotzen nur so vor Kraft. (%s)",
curseid(c));
return 1;
}
return 0;
if (self != 0){
sprintf(buf, "Die Leute strotzen nur so vor Kraft. (%s)",
curseid(c));
return 1;
}
return 0;
}
static struct curse_type ct_strength = { "strength",
CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN,
"Dieser Zauber vermehrt die Stärke der verzauberten Personen um ein "
"vielfaches.",
cinfo_strength
CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN,
"Dieser Zauber vermehrt die Stärke der verzauberten Personen um ein "
"vielfaches.",
cinfo_strength
};
/* ------------------------------------------------------------- */
@ -374,23 +375,23 @@ static struct curse_type ct_strength = { "strength",
static int
cinfo_allskills(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
{
unused(obj);
unused(typ);
unused(c);
unused(obj);
unused(typ);
unused(c);
assert(typ == TYP_UNIT);
assert(typ == TYP_UNIT);
if (self != 0){
sprintf(buf, "Wird von einem Alp geritten. (%s)", curseid(c));
return 1;
}
return 0;
if (self != 0){
sprintf(buf, "Wird von einem Alp geritten. (%s)", curseid(c));
return 1;
}
return 0;
}
static struct curse_type ct_worse = {
"worse",
CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN,
"",
cinfo_allskills
"worse",
CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN,
"",
cinfo_allskills
};
/* ------------------------------------------------------------- */
@ -401,61 +402,61 @@ static struct curse_type ct_worse = {
static int
cinfo_itemcloak(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
{
unit *u;
unused(typ);
unit *u;
unused(typ);
assert(typ == TYP_UNIT);
u = (unit *)obj;
assert(typ == TYP_UNIT);
u = (unit *)obj;
if (self != 0) {
sprintf(buf, "Die Ausrüstung von %s scheint unsichtbar. (%s)",
u->name, curseid(c));
return 1;
}
return 0;
if (self != 0) {
sprintf(buf, "Die Ausrüstung von %s scheint unsichtbar. (%s)",
u->name, curseid(c));
return 1;
}
return 0;
}
static struct curse_type ct_itemcloak = {
"itemcloak",
CURSETYP_UNIT, CURSE_SPREADNEVER, M_DURATION,
"Dieser Zauber macht die Ausrüstung unsichtbar.",
cinfo_itemcloak
"itemcloak",
CURSETYP_UNIT, CURSE_SPREADNEVER, M_DURATION,
"Dieser Zauber macht die Ausrüstung unsichtbar.",
cinfo_itemcloak
};
/* ------------------------------------------------------------- */
static int
cinfo_fumble(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
{
unit * u = (unit*)obj;
unused(typ);
unit * u = (unit*)obj;
unused(typ);
assert(typ == TYP_UNIT);
assert(typ == TYP_UNIT);
if (self != 0){
sprintf(buf, "%s kann sich kaum konzentrieren. (%s)",
u->name, curseid(c));
return 1;
}
return 0;
if (self != 0){
sprintf(buf, "%s kann sich kaum konzentrieren. (%s)",
u->name, curseid(c));
return 1;
}
return 0;
}
static struct curse_type ct_fumble = {
"fumble",
CURSETYP_NORM, CURSE_SPREADNEVER, NO_MERGE,
"Eine Wolke negativer Energie umgibt die Einheit.",
cinfo_fumble
"fumble",
CURSETYP_NORM, CURSE_SPREADNEVER, NO_MERGE,
"Eine Wolke negativer Energie umgibt die Einheit.",
cinfo_fumble
};
/* ------------------------------------------------------------- */
static struct curse_type ct_oldrace = { "oldrace",
CURSETYP_NORM, CURSE_SPREADALWAYS, NO_MERGE,
"",
NULL
CURSETYP_NORM, CURSE_SPREADALWAYS, NO_MERGE,
"",
NULL
};
static struct curse_type ct_magicresistance = { "magicresistance",
CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN,
"Dieser Zauber verstärkt die natürliche Widerstandskraft gegen eine "
"Verzauberung.",
NULL
CURSETYP_UNIT, CURSE_SPREADMODULO, M_MEN,
"Dieser Zauber verstärkt die natürliche Widerstandskraft gegen eine "
"Verzauberung.",
NULL
};
@ -467,80 +468,80 @@ static struct curse_type ct_magicresistance = { "magicresistance",
static int
read_skill(FILE * F, curse * c)
{
int skill;
if (global.data_version<CURSETYPE_VERSION) {
int men;
fscanf(F, "%d %d", &skill, &men);
} else {
fscanf(F, "%d", &skill);
}
c->data.i = skill;
return 0;
int skill;
if (global.data_version<CURSETYPE_VERSION) {
int men;
fscanf(F, "%d %d", &skill, &men);
} else {
fscanf(F, "%d", &skill);
}
c->data.i = skill;
return 0;
}
static int
write_skill(FILE * F, const curse * c)
{
fprintf(F, "%d ", c->data.i);
return 0;
fprintf(F, "%d ", c->data.i);
return 0;
}
static int
cinfo_skill(const struct locale * lang, const void * obj, typ_t typ, struct curse *c, int self)
{
unit *u = (unit *)obj;
int sk = c->data.i;
unit *u = (unit *)obj;
int sk = c->data.i;
unused(typ);
unused(typ);
if (self != 0){
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;
if (self != 0){
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;
}
static struct curse_type ct_skillmod = {
"skillmod",
CURSETYP_NORM, CURSE_SPREADMODULO, M_MEN,
"",
cinfo_skill,
NULL,
read_skill, write_skill
"skillmod",
CURSETYP_NORM, CURSE_SPREADMODULO, M_MEN,
"",
cinfo_skill,
NULL,
read_skill, write_skill
};
/* ------------------------------------------------------------- */
void
register_unitcurse(void)
{
register_function((pf_generic)cinfo_unit_onlyowner, "curseinfo::unit_onlyowner");
register_function((pf_generic)cinfo_auraboost, "curseinfo::auraboost");
register_function((pf_generic)cinfo_slave, "curseinfo::slave");
register_function((pf_generic)cinfo_calm, "curseinfo::calm");
register_function((pf_generic)cinfo_speed, "curseinfo::speed");
register_function((pf_generic)cinfo_orc, "curseinfo::orc");
register_function((pf_generic)cinfo_kaelteschutz, "curseinfo::kaelteschutz");
register_function((pf_generic)cinfo_sparkle, "curseinfo::sparkle");
register_function((pf_generic)cinfo_strength, "curseinfo::strength");
register_function((pf_generic)cinfo_allskills, "curseinfo::allskills");
register_function((pf_generic)cinfo_skill, "curseinfo::skill");
register_function((pf_generic)cinfo_itemcloak, "curseinfo::itemcloak");
register_function((pf_generic)cinfo_fumble, "curseinfo::fumble");
register_function((pf_generic)cinfo_unit_onlyowner, "curseinfo::unit_onlyowner");
register_function((pf_generic)cinfo_auraboost, "curseinfo::auraboost");
register_function((pf_generic)cinfo_slave, "curseinfo::slave");
register_function((pf_generic)cinfo_calm, "curseinfo::calm");
register_function((pf_generic)cinfo_speed, "curseinfo::speed");
register_function((pf_generic)cinfo_orc, "curseinfo::orc");
register_function((pf_generic)cinfo_kaelteschutz, "curseinfo::kaelteschutz");
register_function((pf_generic)cinfo_sparkle, "curseinfo::sparkle");
register_function((pf_generic)cinfo_strength, "curseinfo::strength");
register_function((pf_generic)cinfo_allskills, "curseinfo::allskills");
register_function((pf_generic)cinfo_skill, "curseinfo::skill");
register_function((pf_generic)cinfo_itemcloak, "curseinfo::itemcloak");
register_function((pf_generic)cinfo_fumble, "curseinfo::fumble");
ct_register(&ct_auraboost);
ct_register(&ct_magicboost);
ct_register(&ct_slavery);
ct_register(&ct_calmmonster);
ct_register(&ct_speed);
ct_register(&ct_orcish);
ct_register(&ct_insectfur);
ct_register(&ct_sparkle);
ct_register(&ct_strength);
ct_register(&ct_worse);
ct_register(&ct_skillmod);
ct_register(&ct_itemcloak);
ct_register(&ct_fumble);
ct_register(&ct_oldrace);
ct_register(&ct_magicresistance);
ct_register(&ct_auraboost);
ct_register(&ct_magicboost);
ct_register(&ct_slavery);
ct_register(&ct_calmmonster);
ct_register(&ct_speed);
ct_register(&ct_orcish);
ct_register(&ct_insectfur);
ct_register(&ct_sparkle);
ct_register(&ct_strength);
ct_register(&ct_worse);
ct_register(&ct_skillmod);
ct_register(&ct_itemcloak);
ct_register(&ct_fumble);
ct_register(&ct_oldrace);
ct_register(&ct_magicresistance);
}