diff --git a/src/common/gamecode/report.c b/src/common/gamecode/report.c index 91974a9b0..df82fd2e2 100644 --- a/src/common/gamecode/report.c +++ b/src/common/gamecode/report.c @@ -221,6 +221,7 @@ report_spell(FILE * F, spell *sp, const struct locale * lang) char buf[4096]; char * bufp = buf; size_t size = sizeof(buf) - 1; + const char * params = sp->parameter; rnl(F); centre(F, spell_name(sp, lang), true); @@ -324,85 +325,137 @@ report_spell(FILE * F, spell *sp, const struct locale * lang) rparagraph(F, buf, 0, 0, 0); rparagraph(F, LOC(lang, "nr_spell_syntax"), 0, 0, 0); - if (!sp->syntax) { - static int targets[] = { P_REGION, P_UNIT, P_SHIP, P_BUILDING, MAXPARAMS }; - int * targetp = NULL; - bufp = buf; - size = sizeof(buf) - 1; - - if ((sp->sptyp & ANYTARGET) == ANYTARGET) targetp = targets; - do { - if (sp->sptyp & ISCOMBATSPELL) { - bytes = (int)strlcpy(bufp, LOC(lang, keywords[K_COMBAT]), size); - } else { - bytes = (int)strlcpy(bufp, LOC(lang, keywords[K_CAST]), size); - } - if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); - - /* Reihenfolge beachten: Erst REGION, dann STUFE! */ - if (sp->sptyp & FARCASTING) { - bytes = snprintf(bufp, size, " [%s x y]", LOC(lang, parameters[P_REGION])); - if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); - } - if (sp->sptyp & SPELLLEVEL) { - bytes = snprintf(bufp, size, " [%s n]", LOC(lang, parameters[P_LEVEL])); - } - if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); - - bytes = (int)strlcpy(bufp, " \"", size); - if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); - - bytes = (int)strlcpy(bufp, spell_name(sp, lang), size); - if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); - - bytes = (int)strlcpy(bufp, "\" ", size); - if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); - - if (sp->sptyp & ONETARGET || targetp) { - if (targetp) { - bytes = (int)snprintf(bufp, size, "%s ", parameters[*targetp]); - if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); - } - if (sp->sptyp & UNITSPELL) { - bytes = (int)strlcpy(bufp, "", size); - } else if (sp->sptyp & SHIPSPELL) { - bytes = (int)strlcpy(bufp, "", size); - } else if (sp->sptyp & BUILDINGSPELL) { - bytes = (int)strlcpy(bufp, "", size); - } else { - bytes = 0; - } - if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); - } else { - assert(!targetp); - if (sp->sptyp & UNITSPELL) { - bytes = (int)strlcpy(bufp, " [ ...]", size); - } else if (sp->sptyp & SHIPSPELL) { - bytes = (int)strlcpy(bufp, " [ ...]", size); - } else if (sp->sptyp & BUILDINGSPELL) { - bytes = (int)strlcpy(bufp, " [ ...]", size); - } else { - bytes = 0; - } - if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); - } - if (targetp) { - ++targetp; - if (*targetp!=MAXPARAMS) { - bytes = (int)strlcpy(bufp, "\n", size); - if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); - } else { - targetp = NULL; - } - } - } while (targetp); - - *bufp = 0; - rparagraph(F, buf, 2, 0, 0); + bufp = buf; + size = sizeof(buf) - 1; + + if (sp->sptyp & ISCOMBATSPELL) { + bytes = (int)strlcpy(bufp, LOC(lang, keywords[K_COMBAT]), size); } else { - rparagraph(F, sp->syntax, 2, 0, 0); + bytes = (int)strlcpy(bufp, LOC(lang, keywords[K_CAST]), size); } + if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); + + /* Reihenfolge beachten: Erst REGION, dann STUFE! */ + if (sp->sptyp & FARCASTING) { + bytes = snprintf(bufp, size, " [%s x y]", LOC(lang, parameters[P_REGION])); + if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); + } + if (sp->sptyp & SPELLLEVEL) { + bytes = snprintf(bufp, size, " [%s n]", LOC(lang, parameters[P_LEVEL])); + if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); + } + + bytes = (int)snprintf(bufp, size, " \"%s\"", spell_name(sp, lang)); + if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); + + while (params && *params) { + typedef struct starget { + param_t param; + int flag; + const char * vars; + } starget; + starget targets[] = { + { P_REGION, REGIONSPELL, NULL }, + { P_UNIT, UNITSPELL, "par_unit" }, + { P_SHIP, SHIPSPELL, "par_ship" }, + { P_BUILDING, BUILDINGSPELL, "par_building" }, + { 0, 0, NULL } + }; + starget * targetp; + char cp = *params++; + int i, maxparam = 0; + const char * locp; + const char * syntaxp = sp->syntax; + + if (cp=='u') { + targetp = targets+1; + locp = LOC(lang, targetp->vars); + bytes = (int)snprintf(bufp, size, " <%s>", locp); + if (*params=='+') { + ++params; + if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); + bytes = (int)snprintf(bufp, size, " [<%s> ...]", locp); + } + if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); + } else if (cp=='s') { + targetp = targets+2; + locp = LOC(lang, targetp->vars); + bytes = (int)snprintf(bufp, size, " <%s>", locp); + if (*params=='+') { + ++params; + if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); + bytes = (int)snprintf(bufp, size, " [<%s> ...]", locp); + } + if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); + } else if (cp=='r') { + bytes = (int)strlcpy(bufp, " ", size); + if (*params=='+') { + ++params; + if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); + bytes = (int)strlcpy(bufp, " [ ...]", size); + } + if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); + } else if (cp=='b') { + targetp = targets+3; + locp = LOC(lang, targetp->vars); + bytes = (int)snprintf(bufp, size, " <%s>", locp); + if (*params=='+') { + ++params; + if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); + bytes = (int)snprintf(bufp, size, " [<%s> ...]", locp); + } + if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); + } else if (cp=='k') { + for (targetp=targets;targetp->flag;++targetp) { + if (sp->sptyp&targetp->flag) ++maxparam; + } + if (maxparam>1) { + bytes = (int)strlcpy(bufp, " (", size); + if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); + } + i = 0; + for (targetp=targets;targetp->flag;++targetp) { + if (sp->sptyp&targetp->flag) { + if (i++!=0) { + bytes = (int)strlcpy(bufp, " |", size); + if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); + } + if (targetp->param) { + locp = LOC(lang, targetp->vars); + bytes = (int)snprintf(bufp, size, " %s <%s>", parameters[targetp->param], locp); + if (*params=='+') { + ++params; + if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); + bytes = (int)snprintf(bufp, size, " [<%s> ...]", locp); + } + } else { + bytes = (int)snprintf(bufp, size, " %s", parameters[targetp->param]); + } + if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); + } + } + if (maxparam>1) { + bytes = (int)strlcpy(bufp, " )", size); + if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); + } + } else { + const char * cstr = strchr(syntaxp, ':'); + if (!cstr) { + locp = LOC(lang, mkname("spellpar", syntaxp)); + } else { + char substr[32]; + strncpy(substr, syntaxp, cstr-syntaxp); + substr[cstr-syntaxp] = 0; + locp = LOC(lang, mkname("spellpar", substr)); + syntaxp = substr + 1; + } + bytes = (int)snprintf(bufp, size, " <%s>", locp); + if (wrptr(&bufp, &size, bytes)!=0) WARN_STATIC_BUFFER(); + } + } + *bufp = 0; + rparagraph(F, buf, 2, 0, 0); rnl(F); } diff --git a/src/common/gamecode/spells.c b/src/common/gamecode/spells.c index 6802cb86e..5d4c3f3a2 100644 --- a/src/common/gamecode/spells.c +++ b/src/common/gamecode/spells.c @@ -39,7 +39,7 @@ * der Einheit und auch keine Zauber. * * Flag: - * (UNITSPELL | ONETARGET | TESTCANSEE) + * (UNITSPELL | TESTCANSEE) */ static int sp_babbler(castorder *co) @@ -86,7 +86,7 @@ sp_babbler(castorder *co) * Magieresistenz hier prüfen, wegen Fehlermeldung * * Flag: - * (UNITSPELL | ONETARGET) + * (UNITSPELL) */ static int sp_readmind(castorder *co) diff --git a/src/common/kernel/border.c b/src/common/kernel/border.c index 9695ef7f6..28ab079f5 100644 --- a/src/common/kernel/border.c +++ b/src/common/kernel/border.c @@ -346,7 +346,7 @@ border_type bt_fogwall = { static const char * b_nameillusionwall(const border * b, const region * r, const struct faction * f, int gflags) { - /* TODO: f->locale bestimmt die Sprache */ + /* TODO: UNICODE: f->locale bestimmt die Sprache */ int fno = b->data.i; unused(b); unused(r); @@ -380,7 +380,7 @@ boolean b_blockquestportal(const border * b, const unit * u, const region * r) { static const char * b_namequestportal(const border * b, const region * r, const struct faction * f, int gflags) { - /* TODO: f->locale bestimmt die Sprache */ + /* TODO: UNICODE: f->locale bestimmt die Sprache */ int lock = b->data.i; unused(b); unused(r); diff --git a/src/common/kernel/building.c b/src/common/kernel/building.c index 1cb131992..fa9940182 100644 --- a/src/common/kernel/building.c +++ b/src/common/kernel/building.c @@ -443,7 +443,6 @@ new_building(const struct building_type * btype, region * r, const struct locale if (b->type->name==NULL) { bname = LOC(lang, btype->_name); } else { - /* TODO: optimization potential: make b->name NULL and use this as default */ bname = LOC(lang, buildingtype(btype, b, 0)); } b->name = strdup(bname); diff --git a/src/common/kernel/magic.h b/src/common/kernel/magic.h index 448cdd8ed..77389b761 100644 --- a/src/common/kernel/magic.h +++ b/src/common/kernel/magic.h @@ -188,7 +188,6 @@ extern spell_list ** spelllist_find(spell_list ** lspells, const struct spell * #define SHIPSPELL (1<<3) /* ZAUBER .. [ ..] */ #define BUILDINGSPELL (1<<4) /* ZAUBER .. [ ..] */ #define REGIONSPELL (1<<5) /* wirkt auf struct region */ -#define ONETARGET (1<<6) /* ZAUBER .. */ #define PRECOMBATSPELL (1<<7) /* PRÄKAMPFZAUBER .. */ #define COMBATSPELL (1<<8) /* KAMPFZAUBER .. */ @@ -206,7 +205,7 @@ extern spell_list ** spelllist_find(spell_list ** lspells, const struct spell * #define SEARCHGLOBAL (1<<14) /* Ziel global anstatt nur in target_region suchen */ #define TESTCANSEE (1<<15) /* alle Zielunits auf cansee prüfen */ -#define ANYTARGET (1<<16) /* wirkt auf alle objekttypen (unit, ship, building, region) */ +#define ANYTARGET (UNITSPELL|REGIONSPELL|BUILDINGSPELL|SHIPSPELL) /* wirkt auf alle objekttypen (unit, ship, building, region) */ /* Flag Spruchkostenberechnung: */ enum{ diff --git a/src/common/kernel/save.c b/src/common/kernel/save.c index e48822599..a665c11ce 100644 --- a/src/common/kernel/save.c +++ b/src/common/kernel/save.c @@ -935,20 +935,22 @@ readunit(FILE * F, int encoding) p = n = 0; orderp = &u->orders; while (obuf[0]) { - order * ord = parse_order(obuf, u->faction->locale); - if (ord!=NULL) { - if (++nnext; - ord = NULL; - } else if (p==MAXPERSISTENT) { - log_warning(("%s had %d or more persistent orders\n", unitname(u), MAXPERSISTENT)); + if (!lomem) { + order * ord = parse_order(obuf, u->faction->locale); + if (ord!=NULL) { + if (++nnext; + ord = NULL; + } else if (p==MAXPERSISTENT) { + log_warning(("%s had %d or more persistent orders\n", unitname(u), MAXPERSISTENT)); + } + } else if (n==MAXORDERS) { + log_warning(("%s had %d or more orders\n", unitname(u), MAXORDERS)); } - } else if (n==MAXORDERS) { - log_warning(("%s had %d or more orders\n", unitname(u), MAXORDERS)); + if (ord!=NULL) free_order(ord); } - if (ord!=NULL) free_order(ord); } freadstr(F, encoding, obuf, sizeof(obuf)); } @@ -1897,8 +1899,8 @@ writegame(const char *filename, int quiet) wnl(F); for (b = r->buildings; b; b = b->next) { wi36(F, b->no); - ws(F, (const char *)b->name); - ws(F, b->display?(const char *)b->display:""); + ws(F, b->name); + ws(F, b->display?b->display:""); wi(F, b->size); ws(F, b->type->_name); wnl(F); diff --git a/src/common/kernel/spell.h b/src/common/kernel/spell.h index 7bfd7e05d..3e4e8ac7c 100644 --- a/src/common/kernel/spell.h +++ b/src/common/kernel/spell.h @@ -108,7 +108,6 @@ extern "C" { * UNITSPELL : ZAUBER [ ..] * SHIPSPELL : ZAUBER [ ..] * BUILDINGSPELL: ZAUBER [ ..] - * ONETARGET : ZAUBER * PRECOMBATSPELL : KAMPFZAUBER [STUFE n] * COMBATSPELL : KAMPFZAUBER [STUFE n] * POSTCOMBATSPELL: KAMPFZAUBER [STUFE n] diff --git a/src/common/kernel/xmlreader.c b/src/common/kernel/xmlreader.c index 4207fdabc..6bfeeb779 100644 --- a/src/common/kernel/xmlreader.c +++ b/src/common/kernel/xmlreader.c @@ -1326,6 +1326,13 @@ parse_spells(xmlDocPtr doc) sp->parameter=strdup((const char *)propValue); xmlFree(propValue); } + + propValue = xmlGetProp(node, BAD_CAST "syntax"); + if (propValue) { + sp->syntax=strdup((const char *)propValue); + xmlFree(propValue); + } + /* magic type */ propValue = xmlGetProp(node, BAD_CAST "type"); assert(propValue!=NULL); diff --git a/src/common/spells/alp.h b/src/common/spells/alp.h index eaa5c8f00..cc75c3936 100644 --- a/src/common/spells/alp.h +++ b/src/common/spells/alp.h @@ -36,7 +36,7 @@ struct castorder; * TODO: Der Alp-Curse sollte sich durch besondere Antimagie (Tybied) * entfernen lassen. * - * (UNITSPELL | ONETARGET | SEARCHGLOBAL | TESTRESISTANCE) + * (UNITSPELL | SEARCHGLOBAL | TESTRESISTANCE) */ extern int sp_summon_alp(struct castorder *co); diff --git a/src/common/spells/spells.c b/src/common/spells/spells.c index 3c17029cf..b3077a6e3 100644 --- a/src/common/spells/spells.c +++ b/src/common/spells/spells.c @@ -717,7 +717,7 @@ sp_destroy_magic(castorder *co) * "ZAUBERE " * "ui" * Flags: - * (UNITSPELL|ONSHIPCAST|ONETARGET) + * (UNITSPELL|ONSHIPCAST) * */ static int @@ -785,7 +785,7 @@ sp_transferaura(castorder *co) * verdoppelt), und "Luftschiff". * * Flags: - * (SHIPSPELL|ONSHIPCAST|SPELLLEVEL|ONETARGET|TESTRESISTANCE) + * (SHIPSPELL|ONSHIPCAST|SPELLLEVEL|TESTRESISTANCE) */ static int @@ -934,7 +934,7 @@ sp_summonent(castorder *co) * fertigen Steinkreis mittels des Zaubers erschaffen. * * Flags: - * (BUILDINGSPELL | ONETARGET) + * (BUILDINGSPELL) * */ static int @@ -1412,7 +1412,7 @@ sp_kaelteschutz(castorder *co) * Beschreibung auftaucht, aber nur visuellen Effekt hat. * * Flag: - * (UNITSPELL | TESTCANSEE | SPELLLEVEL | ONETARGET) + * (UNITSPELL | TESTCANSEE | SPELLLEVEL) */ /* Syntax: ZAUBER "Funkenregen" eh1 */ @@ -2531,7 +2531,7 @@ sp_forest_fire(castorder *co) * Magier wird selbst betroffen * * Flags: - * (UNITSPELL | SPELLLEVEL | ONETARGET | TESTCANSEE | TESTRESISTANCE) + * (UNITSPELL | SPELLLEVEL | TESTCANSEE | TESTRESISTANCE) * */ static int @@ -3747,7 +3747,7 @@ sp_analysesong_obj(castorder *co) * c->vigour)*10 + 100 %). * * Flag: - * (UNITSPELL|ONSHIPCAST|ONETARGET|TESTCANSEE) + * (UNITSPELL|ONSHIPCAST|TESTCANSEE) */ static int sp_analysesong_unit(castorder *co) @@ -3795,7 +3795,7 @@ sp_analysesong_unit(castorder *co) * * Attackiere verbieten * Flags: - * (UNITSPELL | ONETARGET | TESTCANSEE) + * (UNITSPELL | TESTCANSEE) */ static int sp_charmingsong(castorder *co) @@ -4053,7 +4053,7 @@ sp_raisepeasantmob(castorder *co) * angeworbene Einheit muss kontaktieren. Keine teuren Talente * * Flag: - * (UNITSPELL | SPELLLEVEL | ONETARGET | TESTCANSEE) + * (UNITSPELL | SPELLLEVEL | TESTCANSEE) */ static int sp_migranten(castorder *co) @@ -4317,7 +4317,7 @@ sp_bigrecruit(castorder *co) * niemand ihrer Partei, so weiß sie nichts zu berichten. Auch kann * sie nur das erzählen, was sie selber sehen könnte. * Flags: - * (UNITSPELL | ONETARGET | TESTCANSEE) + * (UNITSPELL | TESTCANSEE) */ /* restistenz der einheit prüfen */ @@ -4379,7 +4379,7 @@ sp_pump(castorder *co) * kommt Itemzahl%2 mit 50% chance * * Flags: - * (UNITSPELL | ONETARGET | TESTRESISTANCE | TESTCANSEE) + * (UNITSPELL | TESTRESISTANCE | TESTCANSEE) */ static int sp_seduce(castorder *co) @@ -4449,7 +4449,7 @@ sp_seduce(castorder *co) * anderen Magier nochmal gezaubert, schlägt der Zauber fehl. * * Flags: - * (UNITSPELL | ONSHIPCAST | ONETARGET | TESTRESISTANCE | TESTCANSEE) + * (UNITSPELL | ONSHIPCAST | TESTRESISTANCE | TESTCANSEE) */ static int @@ -4500,7 +4500,7 @@ sp_calm_monster(castorder *co) * Wirkt auf bis zu 10 Personen in der Einheit * * Flags: - * (UNITSPELL | ONETARGET | TESTRESISTANCE | TESTCANSEE) + * (UNITSPELL | TESTRESISTANCE | TESTCANSEE) */ static int @@ -4840,7 +4840,7 @@ sp_icastle(castorder *co) * (wie bei dämonischer Rassetarnung). * Syntax: ZAUBERE "Gestaltwandlung" * Flags: - * (UNITSPELL | SPELLLEVEL | ONETARGET) + * (UNITSPELL | SPELLLEVEL) */ int @@ -6140,7 +6140,7 @@ sp_eternizewall(castorder *co) * übertragen, auf einen Magier eines anderen Gebietes ein Drittel. * * Flags: - * (UNITSPELL|ONETARGET) + * (UNITSPELL) * * Syntax: * ZAUBERE \"Opfere Kraft\" @@ -6297,7 +6297,7 @@ shipcurse_flyingship(ship* sh, unit * mage, double power, int duration) * Kombinierbar mit "Günstige Winde", aber nicht mit "Sturmwind". * * Flag: - * (ONSHIPCAST | SHIPSPELL | ONETARGET | TESTRESISTANCE) + * (ONSHIPCAST | SHIPSPELL | TESTRESISTANCE) */ int sp_flying_ship(castorder *co) @@ -6359,7 +6359,7 @@ sp_flying_ship(castorder *co) * zuführen. * * Flags: - * (FARCASTING | SPELLLEVEL | UNITSPELL | ONETARGET | TESTRESISTANCE | + * (FARCASTING | SPELLLEVEL | UNITSPELL | TESTRESISTANCE | * TESTCANSEE) * */ int @@ -7042,7 +7042,7 @@ static spelldata spelldaten[] = { SPL_GOODWINDS, "goodwinds", NULL, NULL, "s", M_DRUIDE, - (SHIPSPELL|ONSHIPCAST|SPELLLEVEL|ONETARGET|TESTRESISTANCE), + (SHIPSPELL|ONSHIPCAST|SPELLLEVEL|TESTRESISTANCE), 5, 4, { { "aura", 1, SPC_LEVEL }, @@ -7091,9 +7091,9 @@ static spelldata spelldaten[] = }, { SPL_TRANSFERAURA_DRUIDE, "transferauradruide", NULL, - "ZAUBERE \'Meditation\' ", + "aura", "ui", - M_DRUIDE, (UNITSPELL|ONSHIPCAST|ONETARGET), 1, 6, + M_DRUIDE, (UNITSPELL|ONSHIPCAST), 1, 6, { { "aura", 2, SPC_FIX }, { 0, 0, 0 }, @@ -7182,7 +7182,7 @@ static spelldata spelldaten[] = SPL_GWYRRD_DESTROY_MAGIC, "gwyrrddestroymagic", NULL, NULL, "kc?", M_DRUIDE, - (FARCASTING | SPELLLEVEL | ONSHIPCAST | ONETARGET | TESTCANSEE | ANYTARGET), + (FARCASTING | SPELLLEVEL | ONSHIPCAST | TESTCANSEE | ANYTARGET), 2, 8, { { "aura", 6, SPC_LEVEL }, @@ -7207,8 +7207,7 @@ static spelldata spelldaten[] = (spell_f)sp_treewalkenter, NULL }, { - SPL_TREEWALKEXIT, "treewalkexit", NULL, - "ZAUBERE \'Sog des Lebens\' [ ..]", + SPL_TREEWALKEXIT, "treewalkexit", NULL, NULL, "ru+", M_DRUIDE, (UNITSPELL | SPELLLEVEL | TESTCANSEE), 7, 9, { @@ -7259,7 +7258,7 @@ static spelldata spelldaten[] = { SPL_BLESSSTONECIRCLE, "blessstonecircle", NULL, NULL, "b", - M_DRUIDE, (BUILDINGSPELL | ONETARGET), 5, 11, + M_DRUIDE, (BUILDINGSPELL), 5, 11, { { "aura", 350, SPC_FIX }, { "permaura", 5, SPC_FIX }, @@ -7353,7 +7352,7 @@ static spelldata spelldaten[] = { SPL_SPARKLE_CHAOS, "sparklechaos", NULL, NULL, "u", - M_CHAOS, (UNITSPELL | TESTCANSEE | SPELLLEVEL | ONETARGET), 5, 1, + M_CHAOS, (UNITSPELL | TESTCANSEE | SPELLLEVEL), 5, 1, { { "aura", 1, SPC_LEVEL }, { 0, 0, 0 }, @@ -7415,7 +7414,7 @@ static spelldata spelldaten[] = SPL_FUMBLECURSE, "fumblecurse", NULL, NULL, "u", M_CHAOS, - (UNITSPELL | SPELLLEVEL | ONETARGET | TESTCANSEE | TESTRESISTANCE), + (UNITSPELL | SPELLLEVEL | TESTCANSEE | TESTRESISTANCE), 4, 5, { { "aura", 4, SPC_LEVEL }, @@ -7453,9 +7452,9 @@ static spelldata spelldaten[] = }, { SPL_TRANSFERAURA_CHAOS, "transferaurachaos", NULL, - "ZAUBERE \'Machtuebertragung\' ", + "aura", "ui", - M_CHAOS, (UNITSPELL|ONSHIPCAST|ONETARGET), 1, 7, + M_CHAOS, (UNITSPELL|ONSHIPCAST), 1, 7, { { "aura", 2, SPC_FIX }, { 0, 0, 0 }, @@ -7467,7 +7466,7 @@ static spelldata spelldaten[] = }, { SPL_FIREWALL, "firewall", NULL, - "ZAUBERE \'Feuerwand\' ", + "direction", "c", M_CHAOS, (SPELLLEVEL | REGIONSPELL | TESTRESISTANCE), 4, 7, { @@ -7569,7 +7568,7 @@ static spelldata spelldaten[] = SPL_DRAIG_DESTROY_MAGIC, "draigdestroymagic", NULL, NULL, "kc?", M_CHAOS, - (FARCASTING | SPELLLEVEL | ONSHIPCAST | ONETARGET | TESTCANSEE | ANYTARGET), + (FARCASTING | SPELLLEVEL | ONSHIPCAST | TESTCANSEE | ANYTARGET), 2, 10, { { "aura", 10, SPC_LEVEL }, @@ -7658,7 +7657,7 @@ static spelldata spelldaten[] = SPL_SPARKLE_DREAM, "sparkledream", NULL, NULL, "u", M_TRAUM, - (UNITSPELL | TESTCANSEE | SPELLLEVEL | ONETARGET | ONSHIPCAST), + (UNITSPELL | TESTCANSEE | SPELLLEVEL | ONSHIPCAST), 5, 1, { { "aura", 1, SPC_LEVEL }, @@ -7707,7 +7706,7 @@ static spelldata spelldaten[] = }, { SPL_ICASTLE, "icastle", NULL, - "ZAUBERE \"Traumschloesschen\" ", + "buildingtype", "c", M_TRAUM, (0), 5, 3, { @@ -7721,9 +7720,9 @@ static spelldata spelldaten[] = }, { SPL_TRANSFERAURA_TRAUM, "transferauratraum", NULL, - "ZAUBERE \'Traum der Magie\' ", + "aura", "ui", - M_TRAUM, (UNITSPELL|ONSHIPCAST|ONETARGET), 1, 3, + M_TRAUM, (UNITSPELL|ONSHIPCAST), 1, 3, { { "aura", 2, SPC_FIX }, { 0, 0, 0 }, @@ -7735,9 +7734,9 @@ static spelldata spelldaten[] = }, { SPL_ILL_SHAPESHIFT, "shapeshift", NULL, - "ZAUBERE [STUFE n] \'Gestaltwandlung\' ", + "race", "uc", - M_TRAUM, (UNITSPELL|SPELLLEVEL|ONETARGET), 5, 3, + M_TRAUM, (UNITSPELL|SPELLLEVEL), 5, 3, { { "aura", 1, SPC_LEVEL }, { 0, 0, 0 }, @@ -7750,7 +7749,7 @@ static spelldata spelldaten[] = { SPL_DREAMREADING, "dreamreading", NULL, NULL, "u", - M_TRAUM, (FARCASTING | UNITSPELL | ONETARGET | TESTRESISTANCE), 5, 4, + M_TRAUM, (FARCASTING | UNITSPELL | TESTRESISTANCE), 5, 4, { { "aura", 8, SPC_FIX }, { 0, 0, 0 }, @@ -7787,7 +7786,7 @@ static spelldata spelldaten[] = { SPL_ANALYSEDREAM, "analysedream", NULL, NULL, "u", - M_TRAUM, (UNITSPELL | ONSHIPCAST | ONETARGET | TESTCANSEE), 5, 5, + M_TRAUM, (UNITSPELL | ONSHIPCAST | TESTCANSEE), 5, 5, { { "aura", 5, SPC_LEVEL }, { 0, 0, 0 }, @@ -7823,7 +7822,7 @@ static spelldata spelldaten[] = }, { SPL_WISPS, "wisps", NULL, - "ZAUBERE [REGION x y] [STUFE n] \'Irrlichter\' ", + "direction", "c", M_TRAUM, (SPELLLEVEL | FARCASTING), 5, 7, { @@ -7853,7 +7852,7 @@ static spelldata spelldaten[] = SPL_ILLAUN_DESTROY_MAGIC, "illaundestroymagic", NULL, NULL, "kc?", M_TRAUM, - (FARCASTING | SPELLLEVEL | ONSHIPCAST | ONETARGET | TESTCANSEE | ANYTARGET), + (FARCASTING | SPELLLEVEL | ONSHIPCAST | TESTCANSEE | ANYTARGET), 2, 8, { { "aura", 6, SPC_LEVEL }, @@ -7930,7 +7929,7 @@ static spelldata spelldaten[] = { SPL_SUMMON_ALP, "summon_alp", NULL, NULL, "u", M_TRAUM, - (UNITSPELL | ONETARGET | SEARCHGLOBAL | TESTRESISTANCE), + (UNITSPELL | SEARCHGLOBAL | TESTRESISTANCE), 5, 15, { { "aura", 350, SPC_FIX }, @@ -8059,7 +8058,7 @@ static spelldata spelldaten[] = { SPL_TRANSFERAURA_BARDE, "transfer_aura_song", NULL, NULL, "ui", - M_BARDE, (UNITSPELL|ONSHIPCAST|ONETARGET), 1, 5, + M_BARDE, (UNITSPELL|ONSHIPCAST), 1, 5, { { "aura", 2, SPC_FIX }, { 0, 0, 0 }, @@ -8073,7 +8072,7 @@ static spelldata spelldaten[] = SPL_UNIT_ANALYSESONG, "analysesong_unit", NULL, NULL, "u", M_BARDE, - (UNITSPELL | ONSHIPCAST | ONETARGET | TESTCANSEE), + (UNITSPELL | ONSHIPCAST | TESTCANSEE), 5, 5, { { "aura", 10, SPC_FIX }, @@ -8099,7 +8098,7 @@ static spelldata spelldaten[] = { SPL_CALM_MONSTER, "calm_monster", NULL, NULL, "u", M_BARDE, - (UNITSPELL | ONSHIPCAST | ONETARGET | TESTRESISTANCE | TESTCANSEE), + (UNITSPELL | ONSHIPCAST | TESTRESISTANCE | TESTCANSEE), 5, 6, { { "aura", 15, SPC_FIX }, @@ -8113,7 +8112,7 @@ static spelldata spelldaten[] = { SPL_SEDUCE, "seduction", NULL, NULL, "u", M_BARDE, - (UNITSPELL | ONETARGET | TESTRESISTANCE | TESTCANSEE), + (UNITSPELL | TESTRESISTANCE | TESTCANSEE), 5, 6, { { "aura", 12, SPC_FIX }, @@ -8128,7 +8127,7 @@ static spelldata spelldaten[] = SPL_HEADACHE, "headache", NULL, NULL, "u", M_BARDE, - (UNITSPELL | ONETARGET | TESTRESISTANCE | TESTCANSEE), + (UNITSPELL | TESTRESISTANCE | TESTCANSEE), 5, 7, { { "aura", 4, SPC_LINEAR }, @@ -8140,9 +8139,9 @@ static spelldata spelldaten[] = (spell_f)sp_headache, NULL }, { SPL_PUMP, "sound_out", NULL, - "ZAUBERE \'Aushorchen\' ", + NULL, "ur", - M_BARDE, (UNITSPELL | ONETARGET | TESTCANSEE), 5, 7, + M_BARDE, (UNITSPELL | TESTCANSEE), 5, 7, { { "aura", 4, SPC_FIX }, { "money", 100, SPC_FIX }, @@ -8177,12 +8176,9 @@ static spelldata spelldaten[] = (spell_f)sp_frighten, NULL }, { - SPL_OBJ_ANALYSESONG, "analyse_object", NULL, - "ZAUBERE [STUFE n] \'Lied des Ortes analysieren\' REGION\n" - "ZAUBERE [STUFE n] \'Lied des Ortes analysieren\' GEBAEUDE \n" - "ZAUBERE [STUFE n] \'Lied des Ortes analysieren\' SCHIFF ", + SPL_OBJ_ANALYSESONG, "analyse_object", NULL, NULL, "kc?", - M_BARDE, (SPELLLEVEL|ONSHIPCAST), 5, 8, + M_BARDE, (SPELLLEVEL | ONSHIPCAST | REGIONSPELL | BUILDINGSPELL | SHIPSPELL), 5, 8, { { "aura", 3, SPC_LEVEL }, { 0, 0, 0 }, @@ -8196,7 +8192,7 @@ static spelldata spelldaten[] = SPL_CERDDOR_DESTROY_MAGIC, "cerddor_destroymagic", NULL, NULL, "kc?", M_BARDE, - (FARCASTING | SPELLLEVEL | ONSHIPCAST | ONETARGET | TESTCANSEE | ANYTARGET), + (FARCASTING | SPELLLEVEL | ONSHIPCAST | TESTCANSEE | ANYTARGET), 2, 8, { { "aura", 5, SPC_LEVEL }, @@ -8210,7 +8206,7 @@ static spelldata spelldaten[] = { SPL_MIGRANT, "migration", NULL, NULL, "u", - M_BARDE, (UNITSPELL | SPELLLEVEL | ONETARGET | TESTCANSEE), 5, 9, + M_BARDE, (UNITSPELL | SPELLLEVEL | TESTCANSEE), 5, 9, { { "aura", 3, SPC_LEVEL }, { "permaura", 1, SPC_LEVEL }, @@ -8300,7 +8296,7 @@ static spelldata spelldaten[] = { SPL_SONG_OF_ENSLAVE, "song_of_slavery", NULL, NULL, "u", - M_BARDE, (UNITSPELL | ONETARGET | TESTCANSEE), 5, 13, + M_BARDE, (UNITSPELL | TESTCANSEE), 5, 13, { { "aura", 40, SPC_FIX }, { 0, 0, 0 }, @@ -8351,7 +8347,7 @@ static spelldata spelldaten[] = { SPL_ANALYSEMAGIC, "analyze_magic", NULL, NULL, "kc?", - M_ASTRAL, (SPELLLEVEL | UNITSPELL | ONSHIPCAST | ONETARGET | TESTCANSEE | ANYTARGET), 5, 1, + M_ASTRAL, (SPELLLEVEL | UNITSPELL | ONSHIPCAST | TESTCANSEE | ANYTARGET), 5, 1, { { "aura", 1, SPC_LEVEL }, { 0, 0, 0 }, @@ -8364,7 +8360,7 @@ static spelldata spelldaten[] = { SPL_ITEMCLOAK, "concealing_aura", NULL, NULL, "u", - M_ASTRAL, (SPELLLEVEL | UNITSPELL | ONSHIPCAST | ONETARGET), 5, 1, + M_ASTRAL, (SPELLLEVEL | UNITSPELL | ONSHIPCAST), 5, 1, { { "aura", 1, SPC_LEVEL }, { 0, 0, 0 }, @@ -8440,9 +8436,7 @@ static spelldata spelldaten[] = (spell_f)sp_enterastral, NULL }, { - SPL_LEAVEASTRAL, "leaveastral", NULL, - "ZAUBER [STUFE n] \'Astraler Ausgang\' " - "[ ...]", + SPL_LEAVEASTRAL, "leaveastral", NULL, NULL, "ru+", M_ASTRAL, (UNITSPELL |SPELLLEVEL), 7, 4, { @@ -8456,9 +8450,9 @@ static spelldata spelldaten[] = }, { SPL_TRANSFERAURA_ASTRAL, "auratransfer", NULL, - "ZAUBERE \'Auratransfer\' ", + "aura", "ui", - M_ASTRAL, (UNITSPELL|ONSHIPCAST|ONETARGET), 1, 5, + M_ASTRAL, (UNITSPELL|ONSHIPCAST), 1, 5, { { "aura", 1, SPC_FIX }, { 0, 0, 0 }, @@ -8497,7 +8491,7 @@ static spelldata spelldaten[] = SPL_TYBIED_DESTROY_MAGIC, "destroy_magic", NULL, NULL, "kc?", M_ASTRAL, - (FARCASTING | SPELLLEVEL | ONSHIPCAST | ONETARGET | TESTCANSEE | ANYTARGET), + (FARCASTING | SPELLLEVEL | ONSHIPCAST | TESTCANSEE | ANYTARGET), 2, 5, { { "aura", 4, SPC_LEVEL }, @@ -8509,9 +8503,7 @@ static spelldata spelldaten[] = (spell_f)sp_destroy_magic, NULL }, { - SPL_PULLASTRAL, "pull_astral", NULL, - "ZAUBER [STUFE n] \'Astraler Ruf\' " - "[ ...]", + SPL_PULLASTRAL, "pull_astral", NULL, NULL, "ru+", M_ASTRAL, (UNITSPELL | SEARCHGLOBAL | SPELLLEVEL), 7, 6, { @@ -8539,7 +8531,7 @@ static spelldata spelldaten[] = { SPL_STEALAURA, "steal_aura", NULL, NULL, "u", M_ASTRAL, - (FARCASTING | SPELLLEVEL | UNITSPELL | ONETARGET | TESTRESISTANCE | TESTCANSEE), + (FARCASTING | SPELLLEVEL | UNITSPELL | TESTRESISTANCE | TESTCANSEE), 3, 6, { { "aura", 2, SPC_LEVEL }, @@ -8552,7 +8544,7 @@ static spelldata spelldaten[] = }, { SPL_FLYING_SHIP, "airship", NULL, NULL, "s", - M_ASTRAL, (ONSHIPCAST | SHIPSPELL | ONETARGET | TESTRESISTANCE), 5, 6, + M_ASTRAL, (ONSHIPCAST | SHIPSPELL | TESTRESISTANCE), 5, 6, { { "aura", 10, SPC_FIX }, { "h12", 1, SPC_FIX }, @@ -8565,7 +8557,7 @@ static spelldata spelldaten[] = { SPL_DESTROY_MAGIC, "break_curse", NULL, NULL, "kcc", - M_ASTRAL, (FARCASTING | SPELLLEVEL | ONSHIPCAST | ONETARGET | TESTCANSEE | ANYTARGET), 3, 7, + M_ASTRAL, (FARCASTING | SPELLLEVEL | ONSHIPCAST | TESTCANSEE | ANYTARGET), 3, 7, { { "aura", 3, SPC_LEVEL }, { 0, 0, 0 }, @@ -8576,11 +8568,9 @@ static spelldata spelldaten[] = (spell_f)sp_break_curse, NULL }, { - SPL_ETERNIZEWALL, "eternal_walls", NULL, - "ZAUBERE \'Mauern der Ewigkeit\' ", - "b", + SPL_ETERNIZEWALL, "eternal_walls", NULL, NULL, "b", M_ASTRAL, - (SPELLLEVEL | BUILDINGSPELL | ONETARGET | TESTRESISTANCE | ONSHIPCAST), + (SPELLLEVEL | BUILDINGSPELL | TESTRESISTANCE | ONSHIPCAST), 5, 7, { { "aura", 50, SPC_FIX }, @@ -8592,11 +8582,8 @@ static spelldata spelldaten[] = (spell_f)sp_eternizewall, NULL }, { - SPL_SCHILDRUNEN, "protective_runes", NULL, - "ZAUBERE \'Runen des Schutzes\' GEBAEUDE | " - "SCHIFF ]", - "kc", - M_ASTRAL, (ONSHIPCAST | TESTRESISTANCE), 2, 8, + SPL_SCHILDRUNEN, "protective_runes", NULL, NULL, "kc", + M_ASTRAL, (ONSHIPCAST | TESTRESISTANCE | BUILDINGSPELL | SHIPSPELL), 2, 8, { { "aura", 20, SPC_FIX }, { 0, 0, 0 }, @@ -8686,12 +8673,10 @@ static spelldata spelldaten[] = (spell_f)sp_summon_familiar, NULL }, { - SPL_MOVECASTLE, "living_rock", - NULL, - "ZAUBER [STUFE n] \'Belebtes Gestein\' ", + SPL_MOVECASTLE, "living_rock", NULL, "direction", "bc", M_ASTRAL, - (SPELLLEVEL | BUILDINGSPELL | ONETARGET | TESTRESISTANCE), + (SPELLLEVEL | BUILDINGSPELL | TESTRESISTANCE), 5, 13, { { "aura", 10, SPC_LEVEL }, @@ -8717,9 +8702,8 @@ static spelldata spelldaten[] = }, { SPL_PERMTRANSFER, "sacrifice_strength", NULL, - "ZAUBERE \'Opfere Kraft\' ", - "ui", - M_ASTRAL, (UNITSPELL|ONETARGET), 1, 15, + "aura", "ui", + M_ASTRAL, (UNITSPELL), 1, 15, { { "aura", 100, SPC_FIX }, { 0, 0, 0 }, diff --git a/src/res/de/strings.xml b/src/res/de/strings.xml index 7f809c20d..05af5862c 100644 --- a/src/res/de/strings.xml +++ b/src/res/de/strings.xml @@ -7472,4 +7472,36 @@ an incomplete road + + Einheit-Nr + unitid + + + + Schiff-Nr + shipid + + + + Gebäude-Nr + buildingid + + + + + Aura + aura + + + + Richtung + direction + + + + Gebäudetyp + buildingtype + + +