forked from github/server
Implemented BSD string.h extensions (strlcat, strlcpy).
Big items in astral space crumble (disabled by define). Chaossog verursacht 3/4 Schaden beim durchgehen (ungetestet). Überladeschutz bei Schiffen abgeschaltet.
This commit is contained in:
parent
1381d330c5
commit
2e9e7f1e23
18 changed files with 319 additions and 165 deletions
|
@ -295,6 +295,38 @@ get_food(region *r)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
age_unit(region * r, unit * u)
|
||||||
|
{
|
||||||
|
if (u->race == new_race[RC_SPELL]) {
|
||||||
|
if (--u->age <= 0) {
|
||||||
|
destroy_unit(u);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
++u->age;
|
||||||
|
if (u->race->age) {
|
||||||
|
u->race->age(u);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef ASTRAL_ITEM_RESTRICTIONS
|
||||||
|
if (u->region->planep==astral_plane) {
|
||||||
|
item ** itemp = &u->items;
|
||||||
|
while (*itemp) {
|
||||||
|
item * itm = *itemp;
|
||||||
|
if (itm->type->flags & ITF_NOTLOST == 0) {
|
||||||
|
if (itm->type->flags & (ITF_BIG|ITF_ANIMAL|ITF_CURSED)) {
|
||||||
|
i_free(i_remove(itemp, itm));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
itemp=&itm->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
live(region * r)
|
live(region * r)
|
||||||
{
|
{
|
||||||
|
|
|
@ -986,18 +986,3 @@ plan_monsters(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
age_unit(region * r, unit * u)
|
|
||||||
{
|
|
||||||
if (u->race == new_race[RC_SPELL]) {
|
|
||||||
if (--u->age <= 0) {
|
|
||||||
destroy_unit(u);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
++u->age;
|
|
||||||
if (u->race->age) {
|
|
||||||
u->race->age(u);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -31,7 +31,6 @@ void age_illusion(struct unit *u);
|
||||||
|
|
||||||
void monsters_kill_peasants(void);
|
void monsters_kill_peasants(void);
|
||||||
void plan_monsters(void);
|
void plan_monsters(void);
|
||||||
void age_unit(struct region * r, struct unit * u);
|
|
||||||
struct unit *random_unit(const struct region * r);
|
struct unit *random_unit(const struct region * r);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -109,7 +109,7 @@ char *agename;
|
||||||
int seasons;
|
int seasons;
|
||||||
|
|
||||||
static size_t
|
static size_t
|
||||||
strlcpy(char * dst, const char * src) {
|
strxcpy(char * dst, const char * src) {
|
||||||
size_t s = 0;
|
size_t s = 0;
|
||||||
while ((*dst++ = *src++)!=0) ++s;
|
while ((*dst++ = *src++)!=0) ++s;
|
||||||
return s;
|
return s;
|
||||||
|
@ -477,13 +477,13 @@ report_spell(FILE * F, spellid_t id, const struct locale * lang)
|
||||||
|
|
||||||
bufp = strcpy(buf, "Art: ");
|
bufp = strcpy(buf, "Art: ");
|
||||||
if (sp->sptyp & PRECOMBATSPELL) {
|
if (sp->sptyp & PRECOMBATSPELL) {
|
||||||
bufp += strlcpy(bufp, "Präkampfzauber");
|
bufp += strxcpy(bufp, "Präkampfzauber");
|
||||||
} else if (sp->sptyp & COMBATSPELL) {
|
} else if (sp->sptyp & COMBATSPELL) {
|
||||||
bufp += strlcpy(bufp, "Kampfzauber");
|
bufp += strxcpy(bufp, "Kampfzauber");
|
||||||
} else if (sp->sptyp & POSTCOMBATSPELL) {
|
} else if (sp->sptyp & POSTCOMBATSPELL) {
|
||||||
bufp += strlcpy(bufp, "Postkampfzauber");
|
bufp += strxcpy(bufp, "Postkampfzauber");
|
||||||
} else {
|
} else {
|
||||||
bufp += strlcpy(bufp, "Normaler Zauber");
|
bufp += strxcpy(bufp, "Normaler Zauber");
|
||||||
}
|
}
|
||||||
rps(F, buf);
|
rps(F, buf);
|
||||||
|
|
||||||
|
@ -497,7 +497,7 @@ report_spell(FILE * F, spellid_t id, const struct locale * lang)
|
||||||
if (sp->sptyp & SPELLLEVEL) {
|
if (sp->sptyp & SPELLLEVEL) {
|
||||||
bufp = buf + sprintf(buf, " %d %s", itemanz, LOC(lang, resname(res, itemanz!=1)));
|
bufp = buf + sprintf(buf, " %d %s", itemanz, LOC(lang, resname(res, itemanz!=1)));
|
||||||
if (costtyp == SPC_LEVEL || costtyp == SPC_LINEAR ) {
|
if (costtyp == SPC_LEVEL || costtyp == SPC_LINEAR ) {
|
||||||
bufp += strlcpy(bufp, " * Stufe");
|
bufp += strxcpy(bufp, " * Stufe");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (costtyp == SPC_LEVEL || costtyp == SPC_LINEAR ) {
|
if (costtyp == SPC_LEVEL || costtyp == SPC_LINEAR ) {
|
||||||
|
@ -509,35 +509,35 @@ report_spell(FILE * F, spellid_t id, const struct locale * lang)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bufp = buf + strlcpy(buf, "Modifikationen: ");
|
bufp = buf + strxcpy(buf, "Modifikationen: ");
|
||||||
if (sp->sptyp & FARCASTING) {
|
if (sp->sptyp & FARCASTING) {
|
||||||
bufp += strlcpy(bufp, "Fernzauber");
|
bufp += strxcpy(bufp, "Fernzauber");
|
||||||
dh = 1;
|
dh = 1;
|
||||||
}
|
}
|
||||||
if (sp->sptyp & OCEANCASTABLE) {
|
if (sp->sptyp & OCEANCASTABLE) {
|
||||||
if (dh == 1){
|
if (dh == 1){
|
||||||
bufp += strlcpy(bufp, ", ");
|
bufp += strxcpy(bufp, ", ");
|
||||||
}
|
}
|
||||||
bufp += strlcpy(bufp, "Seezauber");
|
bufp += strxcpy(bufp, "Seezauber");
|
||||||
dh = 1;
|
dh = 1;
|
||||||
}
|
}
|
||||||
if (sp->sptyp & ONSHIPCAST) {
|
if (sp->sptyp & ONSHIPCAST) {
|
||||||
if (dh == 1){
|
if (dh == 1){
|
||||||
bufp += strlcpy(bufp, ", ");
|
bufp += strxcpy(bufp, ", ");
|
||||||
}
|
}
|
||||||
bufp += strlcpy(bufp, "Schiffszauber");
|
bufp += strxcpy(bufp, "Schiffszauber");
|
||||||
dh = 1;
|
dh = 1;
|
||||||
}
|
}
|
||||||
if (sp->sptyp & NOTFAMILIARCAST) {
|
if (sp->sptyp & NOTFAMILIARCAST) {
|
||||||
if (dh == 1){
|
if (dh == 1){
|
||||||
bufp += strlcpy(bufp, ", k");
|
bufp += strxcpy(bufp, ", k");
|
||||||
} else {
|
} else {
|
||||||
bufp += strlcpy(bufp, "K");
|
bufp += strxcpy(bufp, "K");
|
||||||
}
|
}
|
||||||
bufp += strlcpy(bufp, "ann nicht vom Vertrauten gezaubert werden");
|
bufp += strxcpy(bufp, "ann nicht vom Vertrauten gezaubert werden");
|
||||||
dh = 1;
|
dh = 1;
|
||||||
}
|
}
|
||||||
if(dh == 0) bufp += strlcpy(bufp, "Keine");
|
if(dh == 0) bufp += strxcpy(bufp, "Keine");
|
||||||
|
|
||||||
rps(F, buf);
|
rps(F, buf);
|
||||||
|
|
||||||
|
@ -553,39 +553,39 @@ report_spell(FILE * F, spellid_t id, const struct locale * lang)
|
||||||
|
|
||||||
if (!sp->syntax) {
|
if (!sp->syntax) {
|
||||||
if (sp->sptyp & ISCOMBATSPELL) {
|
if (sp->sptyp & ISCOMBATSPELL) {
|
||||||
bufp = buf + strlcpy(buf, "KAMPFZAUBER ");
|
bufp = buf + strxcpy(buf, "KAMPFZAUBER ");
|
||||||
} else {
|
} else {
|
||||||
bufp = buf + strlcpy(buf, "ZAUBERE ");
|
bufp = buf + strxcpy(buf, "ZAUBERE ");
|
||||||
}
|
}
|
||||||
/* Reihenfolge beachten: Erst REGION, dann STUFE! */
|
/* Reihenfolge beachten: Erst REGION, dann STUFE! */
|
||||||
if (sp->sptyp & FARCASTING) {
|
if (sp->sptyp & FARCASTING) {
|
||||||
bufp += strlcpy(bufp, "[REGION x y] ");
|
bufp += strxcpy(bufp, "[REGION x y] ");
|
||||||
}
|
}
|
||||||
if (sp->sptyp & SPELLLEVEL) {
|
if (sp->sptyp & SPELLLEVEL) {
|
||||||
bufp += strlcpy(bufp, "[STUFE n] ");
|
bufp += strxcpy(bufp, "[STUFE n] ");
|
||||||
}
|
}
|
||||||
bufp += strlcpy(bufp, "\"");
|
bufp += strxcpy(bufp, "\"");
|
||||||
bufp += strlcpy(bufp, spell_name(sp, lang));
|
bufp += strxcpy(bufp, spell_name(sp, lang));
|
||||||
bufp += strlcpy(bufp, "\" ");
|
bufp += strxcpy(bufp, "\" ");
|
||||||
if (sp->sptyp & ONETARGET){
|
if (sp->sptyp & ONETARGET){
|
||||||
if (sp->sptyp & UNITSPELL) {
|
if (sp->sptyp & UNITSPELL) {
|
||||||
bufp += strlcpy(bufp, "<Einheit-Nr>");
|
bufp += strxcpy(bufp, "<Einheit-Nr>");
|
||||||
} else if (sp->sptyp & SHIPSPELL) {
|
} else if (sp->sptyp & SHIPSPELL) {
|
||||||
bufp += strlcpy(bufp, "<Schiff-Nr>");
|
bufp += strxcpy(bufp, "<Schiff-Nr>");
|
||||||
} else if (sp->sptyp & BUILDINGSPELL) {
|
} else if (sp->sptyp & BUILDINGSPELL) {
|
||||||
bufp += strlcpy(bufp, "<Gebäude-Nr>");
|
bufp += strxcpy(bufp, "<Gebäude-Nr>");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (sp->sptyp & UNITSPELL) {
|
if (sp->sptyp & UNITSPELL) {
|
||||||
bufp += strlcpy(bufp, "<Einheit-Nr> [<Einheit-Nr> ...]");
|
bufp += strxcpy(bufp, "<Einheit-Nr> [<Einheit-Nr> ...]");
|
||||||
} else if (sp->sptyp & SHIPSPELL) {
|
} else if (sp->sptyp & SHIPSPELL) {
|
||||||
bufp += strlcpy(bufp, "<Schiff-Nr> [<Schiff-Nr> ...]");
|
bufp += strxcpy(bufp, "<Schiff-Nr> [<Schiff-Nr> ...]");
|
||||||
} else if (sp->sptyp & BUILDINGSPELL) {
|
} else if (sp->sptyp & BUILDINGSPELL) {
|
||||||
bufp += strlcpy(bufp, "<Gebäude-Nr> [<Gebäude-Nr> ...]");
|
bufp += strxcpy(bufp, "<Gebäude-Nr> [<Gebäude-Nr> ...]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
bufp += strlcpy(bufp, sp->syntax);
|
bufp += strxcpy(bufp, sp->syntax);
|
||||||
}
|
}
|
||||||
rps(F, buf);
|
rps(F, buf);
|
||||||
rnl(F);
|
rnl(F);
|
||||||
|
@ -996,9 +996,9 @@ prices(FILE * F, const region * r, const faction * f)
|
||||||
|
|
||||||
if (n > 0) {
|
if (n > 0) {
|
||||||
char * bufp = buf + strlen(buf);
|
char * bufp = buf + strlen(buf);
|
||||||
bufp += strlcpy(bufp, " ");
|
bufp += strxcpy(bufp, " ");
|
||||||
bufp += strlcpy(bufp, LOC(f->locale, "nr_trade_intro"));
|
bufp += strxcpy(bufp, LOC(f->locale, "nr_trade_intro"));
|
||||||
bufp += strlcpy(bufp, " ");
|
bufp += strxcpy(bufp, " ");
|
||||||
|
|
||||||
for (dmd=r->land->demands;dmd;dmd=dmd->next) if(dmd->value > 0) {
|
for (dmd=r->land->demands;dmd;dmd=dmd->next) if(dmd->value > 0) {
|
||||||
m = msg_message("nr_market_price", "product price",
|
m = msg_message("nr_market_price", "product price",
|
||||||
|
@ -1008,14 +1008,14 @@ prices(FILE * F, const region * r, const faction * f)
|
||||||
n--;
|
n--;
|
||||||
bufp += strlen(bufp);
|
bufp += strlen(bufp);
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
bufp += strlcpy(bufp, LOC(f->locale, "nr_trade_end"));
|
bufp += strxcpy(bufp, LOC(f->locale, "nr_trade_end"));
|
||||||
}
|
}
|
||||||
else if (n == 1) {
|
else if (n == 1) {
|
||||||
strcpy(bufp++, " ");
|
strcpy(bufp++, " ");
|
||||||
bufp += strlcpy(bufp, LOC(f->locale, "nr_trade_final"));
|
bufp += strxcpy(bufp, LOC(f->locale, "nr_trade_final"));
|
||||||
strcpy(bufp++, " ");
|
strcpy(bufp++, " ");
|
||||||
} else {
|
} else {
|
||||||
bufp += strlcpy(bufp, LOC(f->locale, "nr_trade_next"));
|
bufp += strxcpy(bufp, LOC(f->locale, "nr_trade_next"));
|
||||||
strcpy(bufp++, " ");
|
strcpy(bufp++, " ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1134,27 +1134,27 @@ describe(FILE * F, const region * r, int partial, faction * f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bufp += strlcpy(bufp, f_regionid(r, f));
|
bufp += strxcpy(bufp, f_regionid(r, f));
|
||||||
|
|
||||||
if (partial == 1) {
|
if (partial == 1) {
|
||||||
bufp += strlcpy(bufp, " (durchgereist)");
|
bufp += strxcpy(bufp, " (durchgereist)");
|
||||||
}
|
}
|
||||||
else if (partial == 3) {
|
else if (partial == 3) {
|
||||||
bufp += strlcpy(bufp, " (benachbart)");
|
bufp += strxcpy(bufp, " (benachbart)");
|
||||||
}
|
}
|
||||||
else if (partial == 2) {
|
else if (partial == 2) {
|
||||||
bufp += strlcpy(bufp, " (vom Turm erblickt)");
|
bufp += strxcpy(bufp, " (vom Turm erblickt)");
|
||||||
}
|
}
|
||||||
/* Terrain */
|
/* Terrain */
|
||||||
|
|
||||||
bufp += strlcpy(bufp, ", ");
|
bufp += strxcpy(bufp, ", ");
|
||||||
if(is_cursed(r->attribs,C_MAELSTROM, 0))
|
if(is_cursed(r->attribs,C_MAELSTROM, 0))
|
||||||
tname = "maelstrom";
|
tname = "maelstrom";
|
||||||
else {
|
else {
|
||||||
if (r_isforest(r)) tname = "forest";
|
if (r_isforest(r)) tname = "forest";
|
||||||
else tname = terrain[rterrain(r)].name;
|
else tname = terrain[rterrain(r)].name;
|
||||||
}
|
}
|
||||||
bufp += strlcpy(bufp, LOC(f->locale, tname));
|
bufp += strxcpy(bufp, LOC(f->locale, tname));
|
||||||
|
|
||||||
/* Bäume */
|
/* Bäume */
|
||||||
|
|
||||||
|
@ -1166,14 +1166,14 @@ describe(FILE * F, const region * r, int partial, faction * f)
|
||||||
bufp += sprintf(bufp, ", %d/%d ", trees, ytrees);
|
bufp += sprintf(bufp, ", %d/%d ", trees, ytrees);
|
||||||
if (fval(r, RF_MALLORN)) {
|
if (fval(r, RF_MALLORN)) {
|
||||||
if (trees == 1)
|
if (trees == 1)
|
||||||
bufp += strlcpy(bufp, LOC(f->locale, "nr_mallorntree"));
|
bufp += strxcpy(bufp, LOC(f->locale, "nr_mallorntree"));
|
||||||
else
|
else
|
||||||
bufp += strlcpy(bufp, LOC(f->locale, "nr_mallorntree_p"));
|
bufp += strxcpy(bufp, LOC(f->locale, "nr_mallorntree_p"));
|
||||||
}
|
}
|
||||||
else if (trees == 1)
|
else if (trees == 1)
|
||||||
bufp += strlcpy(bufp, LOC(f->locale, "nr_tree"));
|
bufp += strxcpy(bufp, LOC(f->locale, "nr_tree"));
|
||||||
else
|
else
|
||||||
bufp += strlcpy(bufp, LOC(f->locale, "nr_tree_p"));
|
bufp += strxcpy(bufp, LOC(f->locale, "nr_tree_p"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -1182,14 +1182,14 @@ describe(FILE * F, const region * r, int partial, faction * f)
|
||||||
bufp += sprintf(bufp, ", %d ", trees);
|
bufp += sprintf(bufp, ", %d ", trees);
|
||||||
if (fval(r, RF_MALLORN)) {
|
if (fval(r, RF_MALLORN)) {
|
||||||
if (trees == 1)
|
if (trees == 1)
|
||||||
bufp += strlcpy(bufp, LOC(f->locale, "nr_mallorntree"));
|
bufp += strxcpy(bufp, LOC(f->locale, "nr_mallorntree"));
|
||||||
else
|
else
|
||||||
bufp += strlcpy(bufp, LOC(f->locale, "nr_mallorntree_p"));
|
bufp += strxcpy(bufp, LOC(f->locale, "nr_mallorntree_p"));
|
||||||
}
|
}
|
||||||
else if (trees == 1)
|
else if (trees == 1)
|
||||||
bufp += strlcpy(bufp, LOC(f->locale, "nr_tree"));
|
bufp += strxcpy(bufp, LOC(f->locale, "nr_tree"));
|
||||||
else
|
else
|
||||||
bufp += strlcpy(bufp, LOC(f->locale, "nr_tree_p"));
|
bufp += strxcpy(bufp, LOC(f->locale, "nr_tree_p"));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1251,15 +1251,15 @@ describe(FILE * F, const region * r, int partial, faction * f)
|
||||||
|
|
||||||
if(fval(r, RF_ORCIFIED)) {
|
if(fval(r, RF_ORCIFIED)) {
|
||||||
strcpy(bufp++, " ");
|
strcpy(bufp++, " ");
|
||||||
bufp += strlcpy(bufp, LOC(f->locale, rpeasants(r)==1?"rc_orc":"rc_orc_p"));
|
bufp += strxcpy(bufp, LOC(f->locale, rpeasants(r)==1?"rc_orc":"rc_orc_p"));
|
||||||
} else {
|
} else {
|
||||||
strcpy(bufp++, " ");
|
strcpy(bufp++, " ");
|
||||||
bufp += strlcpy(bufp, LOC(f->locale, resourcename(oldresourcetype[R_PEASANTS], rpeasants(r)!=1)));
|
bufp += strxcpy(bufp, LOC(f->locale, resourcename(oldresourcetype[R_PEASANTS], rpeasants(r)!=1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rmoney(r) && partial == 0) {
|
if (rmoney(r) && partial == 0) {
|
||||||
bufp += sprintf(bufp, ", %d ", rmoney(r));
|
bufp += sprintf(bufp, ", %d ", rmoney(r));
|
||||||
bufp += strlcpy(bufp, LOC(f->locale, resourcename(oldresourcetype[R_SILVER], rmoney(r)!=1)));
|
bufp += strxcpy(bufp, LOC(f->locale, resourcename(oldresourcetype[R_SILVER], rmoney(r)!=1)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Pferde */
|
/* Pferde */
|
||||||
|
@ -1267,16 +1267,16 @@ describe(FILE * F, const region * r, int partial, faction * f)
|
||||||
if (rhorses(r)) {
|
if (rhorses(r)) {
|
||||||
bufp += sprintf(bufp, ", %d ", rhorses(r));
|
bufp += sprintf(bufp, ", %d ", rhorses(r));
|
||||||
#ifdef NEW_ITEMS
|
#ifdef NEW_ITEMS
|
||||||
bufp += strlcpy(bufp, LOC(f->locale, resourcename(oldresourcetype[R_HORSE], (rhorses(r)>1)?GR_PLURAL:0)));
|
bufp += strxcpy(bufp, LOC(f->locale, resourcename(oldresourcetype[R_HORSE], (rhorses(r)>1)?GR_PLURAL:0)));
|
||||||
#else
|
#else
|
||||||
bufp += strlcpy(bufp, itemdata[I_HORSE].name[rhorses(r) > 1]);
|
bufp += strxcpy(bufp, itemdata[I_HORSE].name[rhorses(r) > 1]);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
strcpy(bufp++, ".");
|
strcpy(bufp++, ".");
|
||||||
|
|
||||||
if (r->display && r->display[0]) {
|
if (r->display && r->display[0]) {
|
||||||
strcpy(bufp++, " ");
|
strcpy(bufp++, " ");
|
||||||
bufp += strlcpy(bufp, r->display);
|
bufp += strxcpy(bufp, r->display);
|
||||||
|
|
||||||
n = r->display[strlen(r->display) - 1];
|
n = r->display[strlen(r->display) - 1];
|
||||||
if (n != '!' && n != '?' && n != '.')
|
if (n != '!' && n != '?' && n != '.')
|
||||||
|
@ -1286,8 +1286,8 @@ describe(FILE * F, const region * r, int partial, faction * f)
|
||||||
{
|
{
|
||||||
const unit * u = region_owner(r);
|
const unit * u = region_owner(r);
|
||||||
if (u) {
|
if (u) {
|
||||||
bufp += strlcpy(bufp, " Die Region ist im Besitz von ");
|
bufp += strxcpy(bufp, " Die Region ist im Besitz von ");
|
||||||
bufp += strlcpy(bufp, factionname(u->faction));
|
bufp += strxcpy(bufp, factionname(u->faction));
|
||||||
strcpy(bufp++, ".");
|
strcpy(bufp++, ".");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1296,7 +1296,7 @@ describe(FILE * F, const region * r, int partial, faction * f)
|
||||||
attrib *a_do = a_find(r->attribs, &at_overrideroads);
|
attrib *a_do = a_find(r->attribs, &at_overrideroads);
|
||||||
if(a_do) {
|
if(a_do) {
|
||||||
strcpy(bufp++, " ");
|
strcpy(bufp++, " ");
|
||||||
bufp += strlcpy(bufp, (char *)a_do->data.v);
|
bufp += strxcpy(bufp, (char *)a_do->data.v);
|
||||||
} else {
|
} else {
|
||||||
int nrd = 0;
|
int nrd = 0;
|
||||||
|
|
||||||
|
@ -1314,11 +1314,11 @@ describe(FILE * F, const region * r, int partial, faction * f)
|
||||||
if (dh) {
|
if (dh) {
|
||||||
if (nrd == 0) {
|
if (nrd == 0) {
|
||||||
strcpy(bufp++, " ");
|
strcpy(bufp++, " ");
|
||||||
bufp += strlcpy(bufp, LOC(f->locale, "nr_nb_final"));
|
bufp += strxcpy(bufp, LOC(f->locale, "nr_nb_final"));
|
||||||
} else {
|
} else {
|
||||||
bufp += strlcpy(bufp, LOC(f->locale, "nr_nb_next"));
|
bufp += strxcpy(bufp, LOC(f->locale, "nr_nb_next"));
|
||||||
}
|
}
|
||||||
bufp += strlcpy(bufp, LOC(f->locale, directions[d]));
|
bufp += strxcpy(bufp, LOC(f->locale, directions[d]));
|
||||||
strcpy(bufp++, " ");
|
strcpy(bufp++, " ");
|
||||||
bufp += sprintf(bufp, trailinto(r2, f->locale),
|
bufp += sprintf(bufp, trailinto(r2, f->locale),
|
||||||
f_regionid(r2, f));
|
f_regionid(r2, f));
|
||||||
|
@ -1334,17 +1334,17 @@ describe(FILE * F, const region * r, int partial, faction * f)
|
||||||
for (a = a_find(r->attribs, &at_direction);a;a = a->nexttype) {
|
for (a = a_find(r->attribs, &at_direction);a;a = a->nexttype) {
|
||||||
spec_direction * d = (spec_direction *)(a->data.v);
|
spec_direction * d = (spec_direction *)(a->data.v);
|
||||||
strcpy(bufp++, " ");
|
strcpy(bufp++, " ");
|
||||||
bufp += strlcpy(bufp, d->desc);
|
bufp += strxcpy(bufp, d->desc);
|
||||||
bufp += strlcpy(bufp, " (\"");
|
bufp += strxcpy(bufp, " (\"");
|
||||||
bufp += strlcpy(bufp, d->keyword);
|
bufp += strxcpy(bufp, d->keyword);
|
||||||
bufp += strlcpy(bufp, "\")");
|
bufp += strxcpy(bufp, "\")");
|
||||||
strcpy(bufp++, ".");
|
strcpy(bufp++, ".");
|
||||||
dh = 1;
|
dh = 1;
|
||||||
}
|
}
|
||||||
if (dh) strcpy(bufp++, ".");
|
if (dh) strcpy(bufp++, ".");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
bufp += strlcpy(bufp, " Große Verwirrung befällt alle Reisenden in dieser Region.");
|
bufp += strxcpy(bufp, " Große Verwirrung befällt alle Reisenden in dieser Region.");
|
||||||
}
|
}
|
||||||
rnl(F);
|
rnl(F);
|
||||||
rparagraph(F, buf, 0, 0);
|
rparagraph(F, buf, 0, 0);
|
||||||
|
@ -1389,18 +1389,18 @@ describe(FILE * F, const region * r, int partial, faction * f)
|
||||||
boolean first = true;
|
boolean first = true;
|
||||||
for (d=0;d!=MAXDIRECTIONS;++d) {
|
for (d=0;d!=MAXDIRECTIONS;++d) {
|
||||||
if (!e->exist[d]) continue;
|
if (!e->exist[d]) continue;
|
||||||
if (first) bufp += strlcpy(bufp, "Im ");
|
if (first) bufp += strxcpy(bufp, "Im ");
|
||||||
else {
|
else {
|
||||||
if (e->lastd==d) bufp += strlcpy(bufp, " und im ");
|
if (e->lastd==d) bufp += strxcpy(bufp, " und im ");
|
||||||
else bufp += strlcpy(bufp, ", im ");
|
else bufp += strxcpy(bufp, ", im ");
|
||||||
}
|
}
|
||||||
bufp += strlcpy(bufp, LOC(f->locale, directions[d]));
|
bufp += strxcpy(bufp, LOC(f->locale, directions[d]));
|
||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
if (!e->transparent) bufp += strlcpy(bufp, " versperrt ");
|
if (!e->transparent) bufp += strxcpy(bufp, " versperrt ");
|
||||||
else bufp += strlcpy(bufp, " befindet sich ");
|
else bufp += strxcpy(bufp, " befindet sich ");
|
||||||
bufp += strlcpy(bufp, e->name);
|
bufp += strxcpy(bufp, e->name);
|
||||||
if (!e->transparent) bufp += strlcpy(bufp, " die Sicht.");
|
if (!e->transparent) bufp += strxcpy(bufp, " die Sicht.");
|
||||||
else strcpy(bufp++, ".");
|
else strcpy(bufp++, ".");
|
||||||
rparagraph(F, buf, 0, 0);
|
rparagraph(F, buf, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,7 +100,6 @@ struct building_type;
|
||||||
#define NEW_RECEIPIES /* Vereinfachte, besser verteilte Kräuterzutaten für Tränke */
|
#define NEW_RECEIPIES /* Vereinfachte, besser verteilte Kräuterzutaten für Tränke */
|
||||||
#define GOBLINKILL
|
#define GOBLINKILL
|
||||||
|
|
||||||
#define USE_FIREWALL 1
|
|
||||||
#undef COMPATIBILITY
|
#undef COMPATIBILITY
|
||||||
|
|
||||||
#define MONSTER_FACTION 0 /* Die Partei, in der die Monster sind. */
|
#define MONSTER_FACTION 0 /* Die Partei, in der die Monster sind. */
|
||||||
|
|
|
@ -1159,15 +1159,15 @@ static t_item itemdata[MAXITEMS] = {
|
||||||
},
|
},
|
||||||
{ /* I_PEGASUS 60 */
|
{ /* I_PEGASUS 60 */
|
||||||
{"Pegasus", "Pegasi", "Pegasus", "Pegasi" }, G_M,
|
{"Pegasus", "Pegasi", "Pegasus", "Pegasi" }, G_M,
|
||||||
IS_MAGIC, 0, 0, {0, 0, 0, 0, 0, 0}, 5000, 0, FL_ITEM_ANIMAL | FL_ITEM_NOTINBAG, NULL
|
IS_MAGIC, 0, 0, {0, 0, 0, 0, 0, 0}, 5000, 0, FL_ITEM_ANIMAL | FL_ITEM_NOTINBAG | FL_ITEM_NOTLOST, NULL
|
||||||
},
|
},
|
||||||
{ /* I_UNICORN 61 */
|
{ /* I_UNICORN 61 */
|
||||||
{"Elfenpferd", "Elfenpferde", "Elfenpferd", "Elfenpferde"}, G_N,
|
{"Elfenpferd", "Elfenpferde", "Elfenpferd", "Elfenpferde"}, G_N,
|
||||||
IS_MAGIC, 0, 0, {0, 0, 0, 0, 0, 0}, 5000, 0, FL_ITEM_ANIMAL | FL_ITEM_NOTINBAG, NULL
|
IS_MAGIC, 0, 0, {0, 0, 0, 0, 0, 0}, 5000, 0, FL_ITEM_ANIMAL | FL_ITEM_NOTINBAG | FL_ITEM_NOTLOST, NULL
|
||||||
},
|
},
|
||||||
{ /* I_DOLPHIN 62 */
|
{ /* I_DOLPHIN 62 */
|
||||||
{"Delphin", "Delphine", "Delphin", "Delphine"}, G_M,
|
{"Delphin", "Delphine", "Delphin", "Delphine"}, G_M,
|
||||||
IS_MAGIC, 0, 0, {0, 0, 0, 0, 0, 0}, 5000, 0, FL_ITEM_ANIMAL | FL_ITEM_NOTINBAG, NULL
|
IS_MAGIC, 0, 0, {0, 0, 0, 0, 0, 0}, 5000, 0, FL_ITEM_ANIMAL | FL_ITEM_NOTINBAG | FL_ITEM_NOTLOST, NULL
|
||||||
},
|
},
|
||||||
{ /* I_ANTIMAGICCRYSTAL 63 */
|
{ /* I_ANTIMAGICCRYSTAL 63 */
|
||||||
{"Antimagiekristall", "Antimagiekristalle", "Amulett", "Amulette"}, G_M,
|
{"Antimagiekristall", "Antimagiekristalle", "Amulett", "Amulette"}, G_M,
|
||||||
|
@ -1216,7 +1216,7 @@ static t_item itemdata[MAXITEMS] = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{"Zauberbeutel", "Zauberbeutel", "Zauberbeutel", "Zauberbeutel"}, G_M,
|
{"Zauberbeutel", "Zauberbeutel", "Zauberbeutel", "Zauberbeutel"}, G_M,
|
||||||
IS_MAGIC, 0, 0, {0, 0, 0, 0, 0, 0}, 100, 0, FL_ITEM_NOTINBAG, NULL
|
IS_MAGIC, 0, 0, {0, 0, 0, 0, 0, 0}, 100, 0, FL_ITEM_NOTINBAG|FL_ITEM_NOTLOST, NULL
|
||||||
},
|
},
|
||||||
{ /* I_RUSTY_SWORD */
|
{ /* I_RUSTY_SWORD */
|
||||||
{"Schartiges Schwert", "Schartige Schwerter", "Schartiges Schwert", "Schartige Schwerter"}, G_N,
|
{"Schartiges Schwert", "Schartige Schwerter", "Schartiges Schwert", "Schartige Schwerter"}, G_N,
|
||||||
|
|
|
@ -56,14 +56,9 @@
|
||||||
#include <attributes/otherfaction.h>
|
#include <attributes/otherfaction.h>
|
||||||
#include <attributes/racename.h>
|
#include <attributes/racename.h>
|
||||||
|
|
||||||
const char * g_reportdir;
|
#include <util/bsdstring.h>
|
||||||
|
|
||||||
static size_t
|
const char * g_reportdir;
|
||||||
strlcpy(char * dst, const char * src) {
|
|
||||||
size_t s = 0;
|
|
||||||
while ((*dst++ = *src++)!=0) ++s;
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *neue_gebiete[] = {
|
const char *neue_gebiete[] = {
|
||||||
"none",
|
"none",
|
||||||
|
@ -191,7 +186,7 @@ bufunit(const faction * f, const unit * u, int indent, int mode)
|
||||||
if (fspecial(u->faction, FS_HIDDEN))
|
if (fspecial(u->faction, FS_HIDDEN))
|
||||||
a_fshidden = a_find(u->attribs, &at_fshidden);
|
a_fshidden = a_find(u->attribs, &at_fshidden);
|
||||||
|
|
||||||
bufp += strlcpy(bufp, unitname(u));
|
bufp += strlcpy(bufp, unitname(u), sizeof(buf));
|
||||||
|
|
||||||
if (!isbattle) {
|
if (!isbattle) {
|
||||||
attrib *a_otherfaction = a_find(u->attribs, &at_otherfaction);
|
attrib *a_otherfaction = a_find(u->attribs, &at_otherfaction);
|
||||||
|
@ -199,30 +194,30 @@ bufunit(const faction * f, const unit * u, int indent, int mode)
|
||||||
attrib *a = a_find(u->attribs, &at_group);
|
attrib *a = a_find(u->attribs, &at_group);
|
||||||
if (a) {
|
if (a) {
|
||||||
group * g = (group*)a->data.v;
|
group * g = (group*)a->data.v;
|
||||||
bufp += strlcpy(bufp, ", ");
|
bufp += strlcpy(bufp, ", ", sizeof(buf)-(bufp-buf));
|
||||||
bufp += strlcpy(bufp, groupid(g, f));
|
bufp += strlcpy(bufp, groupid(g, f), sizeof(buf)-(bufp-buf));
|
||||||
}
|
}
|
||||||
if (getarnt) {
|
if (getarnt) {
|
||||||
bufp += strlcpy(bufp, ", ");
|
bufp += strlcpy(bufp, ", ", sizeof(buf)-(bufp-buf));
|
||||||
bufp += strlcpy(bufp, LOC(f->locale, "anonymous"));
|
bufp += strlcpy(bufp, LOC(f->locale, "anonymous"), sizeof(buf)-(bufp-buf));
|
||||||
} else if (a_otherfaction) {
|
} else if (a_otherfaction) {
|
||||||
faction * otherfaction = get_otherfaction(a_otherfaction);
|
faction * otherfaction = get_otherfaction(a_otherfaction);
|
||||||
if (otherfaction) {
|
if (otherfaction) {
|
||||||
bufp += strlcpy(bufp, ", ");
|
bufp += strlcpy(bufp, ", ", sizeof(buf)-(bufp-buf));
|
||||||
bufp += strlcpy(bufp, factionname(otherfaction));
|
bufp += strlcpy(bufp, factionname(otherfaction), sizeof(buf)-(bufp-buf));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (getarnt) {
|
if (getarnt) {
|
||||||
bufp += strlcpy(bufp, ", ");
|
bufp += strlcpy(bufp, ", ", sizeof(buf)-(bufp-buf));
|
||||||
bufp += strlcpy(bufp, LOC(f->locale, "anonymous"));
|
bufp += strlcpy(bufp, LOC(f->locale, "anonymous"), sizeof(buf)-(bufp-buf));
|
||||||
} else {
|
} else {
|
||||||
if (a_otherfaction && alliedunit(u, f, HELP_FSTEALTH)) {
|
if (a_otherfaction && alliedunit(u, f, HELP_FSTEALTH)) {
|
||||||
faction * f = get_otherfaction(a_otherfaction);
|
faction * f = get_otherfaction(a_otherfaction);
|
||||||
bufp += sprintf(bufp, ", %s (%s)", factionname(f), factionname(u->faction));
|
bufp += sprintf(bufp, ", %s (%s)", factionname(f), factionname(u->faction));
|
||||||
} else {
|
} else {
|
||||||
bufp += strlcpy(bufp, ", ");
|
bufp += strlcpy(bufp, ", ", sizeof(buf)-(bufp-buf));
|
||||||
bufp += strlcpy(bufp, factionname(fv));
|
bufp += strlcpy(bufp, factionname(fv), sizeof(buf)-(bufp-buf));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -235,15 +230,15 @@ bufunit(const faction * f, const unit * u, int indent, int mode)
|
||||||
if (is_ugroupleader(u, ug)) {
|
if (is_ugroupleader(u, ug)) {
|
||||||
strcpy(bufp++, "*");
|
strcpy(bufp++, "*");
|
||||||
}
|
}
|
||||||
bufp += strlcpy(bufp, itoa36(ug->id));
|
bufp += strlcpy(bufp, itoa36(ug->id), sizeof(buf)-(bufp-buf));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bufp += strlcpy(bufp, ", ");
|
bufp += strlcpy(bufp, ", ", sizeof(buf)-(bufp-buf));
|
||||||
|
|
||||||
if (u->faction != f && a_fshidden && a_fshidden->data.ca[0] == 1 && effskill(u, SK_STEALTH) >= 6) {
|
if (u->faction != f && a_fshidden && a_fshidden->data.ca[0] == 1 && effskill(u, SK_STEALTH) >= 6) {
|
||||||
bufp += strlcpy(bufp, "? ");
|
bufp += strlcpy(bufp, "? ", sizeof(buf)-(bufp-buf));
|
||||||
} else {
|
} else {
|
||||||
bufp += sprintf(bufp, "%d ", u->number);
|
bufp += sprintf(bufp, "%d ", u->number);
|
||||||
}
|
}
|
||||||
|
@ -252,56 +247,56 @@ bufunit(const faction * f, const unit * u, int indent, int mode)
|
||||||
if (pzTmp) {
|
if (pzTmp) {
|
||||||
scat(pzTmp);
|
scat(pzTmp);
|
||||||
if (u->faction==f && fval(u->race, RCF_SHAPESHIFTANY)) {
|
if (u->faction==f && fval(u->race, RCF_SHAPESHIFTANY)) {
|
||||||
bufp += strlcpy(bufp, " (");
|
bufp += strlcpy(bufp, " (", sizeof(buf)-(bufp-buf));
|
||||||
bufp += strlcpy(bufp, racename(f->locale, u, u->race));
|
bufp += strlcpy(bufp, racename(f->locale, u, u->race), sizeof(buf)-(bufp-buf));
|
||||||
strcpy(bufp++, ")");
|
strcpy(bufp++, ")");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
bufp += strlcpy(bufp, racename(f->locale, u, u->irace));
|
bufp += strlcpy(bufp, racename(f->locale, u, u->irace), sizeof(buf)-(bufp-buf));
|
||||||
if (u->faction==f && u->irace!=u->race) {
|
if (u->faction==f && u->irace!=u->race) {
|
||||||
bufp += strlcpy(bufp, " (");
|
bufp += strlcpy(bufp, " (", sizeof(buf)-(bufp-buf));
|
||||||
bufp += strlcpy(bufp, racename(f->locale, u, u->race));
|
bufp += strlcpy(bufp, racename(f->locale, u, u->race), sizeof(buf)-(bufp-buf));
|
||||||
strcpy(bufp++, ")");
|
strcpy(bufp++, ")");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HEROES
|
#ifdef HEROES
|
||||||
if (fval(u, UFL_HERO) && (u->faction == f || omniscient(f))) {
|
if (fval(u, UFL_HERO) && (u->faction == f || omniscient(f))) {
|
||||||
bufp += strlcpy(bufp, ", ");
|
bufp += strlcpy(bufp, ", ", sizeof(buf)-(bufp-buf));
|
||||||
bufp += strlcpy(bufp, LOC(f->locale, "hero"));
|
bufp += strlcpy(bufp, LOC(f->locale, "hero"), sizeof(buf)-(bufp-buf));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
/* status */
|
/* status */
|
||||||
|
|
||||||
if (u->number && (u->faction == f || telepath_see || isbattle)) {
|
if (u->number && (u->faction == f || telepath_see || isbattle)) {
|
||||||
const char * c = locale_string(f->locale, hp_status(u));
|
const char * c = locale_string(f->locale, hp_status(u));
|
||||||
bufp += strlcpy(bufp, ", ");
|
bufp += strlcpy(bufp, ", ", sizeof(buf)-(bufp-buf));
|
||||||
bufp += strlcpy(bufp, report_kampfstatus(u, f->locale));
|
bufp += strlcpy(bufp, report_kampfstatus(u, f->locale), sizeof(buf)-(bufp-buf));
|
||||||
if (c || fval(u, UFL_HUNGER)) {
|
if (c || fval(u, UFL_HUNGER)) {
|
||||||
bufp += strlcpy(bufp, " (");
|
bufp += strlcpy(bufp, " (", sizeof(buf)-(bufp-buf));
|
||||||
if (c) bufp += strlcpy(bufp, c);
|
if (c) bufp += strlcpy(bufp, c, sizeof(buf)-(bufp-buf));
|
||||||
if (fval(u, UFL_HUNGER)) {
|
if (fval(u, UFL_HUNGER)) {
|
||||||
if (c) bufp += strlcpy(bufp, ", hungert");
|
if (c) bufp += strlcpy(bufp, ", hungert", sizeof(buf)-(bufp-buf));
|
||||||
else bufp += strlcpy(bufp, "hungert");
|
else bufp += strlcpy(bufp, "hungert", sizeof(buf)-(bufp-buf));
|
||||||
}
|
}
|
||||||
strcpy(bufp++, ")");
|
strcpy(bufp++, ")");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (getguard(u)) bufp += strlcpy(bufp, ", bewacht die Region");
|
if (getguard(u)) bufp += strlcpy(bufp, ", bewacht die Region", sizeof(buf)-(bufp-buf));
|
||||||
|
|
||||||
if (u->faction==f || telepath_see) {
|
if (u->faction==f || telepath_see) {
|
||||||
attrib * a = a_find(u->attribs, &at_follow);
|
attrib * a = a_find(u->attribs, &at_follow);
|
||||||
if (a) {
|
if (a) {
|
||||||
unit * uf = (unit*)a->data.v;
|
unit * uf = (unit*)a->data.v;
|
||||||
if (uf) {
|
if (uf) {
|
||||||
bufp += strlcpy(bufp, ", folgt ");
|
bufp += strlcpy(bufp, ", folgt ", sizeof(buf)-(bufp-buf));
|
||||||
bufp += strlcpy(bufp, itoa36(uf->no));
|
bufp += strlcpy(bufp, itoa36(uf->no), sizeof(buf)-(bufp-buf));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((b = usiege(u))!=NULL) {
|
if ((b = usiege(u))!=NULL) {
|
||||||
bufp += strlcpy(bufp, ", belagert ");
|
bufp += strlcpy(bufp, ", belagert ", sizeof(buf)-(bufp-buf));
|
||||||
bufp += strlcpy(bufp, buildingname(b));
|
bufp += strlcpy(bufp, buildingname(b), sizeof(buf)-(bufp-buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
dh = 0;
|
dh = 0;
|
||||||
|
@ -347,14 +342,14 @@ bufunit(const faction * f, const unit * u, int indent, int mode)
|
||||||
int in;
|
int in;
|
||||||
report_item(u, itm, f, &ic, NULL, &in, false);
|
report_item(u, itm, f, &ic, NULL, &in, false);
|
||||||
if (in==0 || ic==NULL) continue;
|
if (in==0 || ic==NULL) continue;
|
||||||
bufp += strlcpy(bufp, ", ");
|
bufp += strlcpy(bufp, ", ", sizeof(buf)-(bufp-buf));
|
||||||
|
|
||||||
if (!dh) {
|
if (!dh) {
|
||||||
bufp += sprintf(bufp, "%s: ", LOC(f->locale, "nr_inventory"));
|
bufp += sprintf(bufp, "%s: ", LOC(f->locale, "nr_inventory"));
|
||||||
dh = 1;
|
dh = 1;
|
||||||
}
|
}
|
||||||
if (in == 1) {
|
if (in == 1) {
|
||||||
bufp += strlcpy(bufp, ic);
|
bufp += strlcpy(bufp, ic, sizeof(buf)-(bufp-buf));
|
||||||
} else {
|
} else {
|
||||||
bufp += sprintf(bufp, "%d %s", in, ic);
|
bufp += sprintf(bufp, "%d %s", in, ic);
|
||||||
}
|
}
|
||||||
|
@ -377,9 +372,9 @@ bufunit(const faction * f, const unit * u, int indent, int mode)
|
||||||
bufp += sprintf(bufp, ", %s: ", LOC(f->locale, "nr_spells"));
|
bufp += sprintf(bufp, ", %s: ", LOC(f->locale, "nr_spells"));
|
||||||
dh = 1;
|
dh = 1;
|
||||||
} else {
|
} else {
|
||||||
bufp += strlcpy(bufp, ", ");
|
bufp += strlcpy(bufp, ", ", sizeof(buf)-(bufp-buf));
|
||||||
}
|
}
|
||||||
bufp += strlcpy(bufp, spell_name(sp, f->locale));
|
bufp += strlcpy(bufp, spell_name(sp, f->locale), sizeof(buf)-(bufp-buf));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dh = 0;
|
dh = 0;
|
||||||
|
@ -396,17 +391,17 @@ bufunit(const faction * f, const unit * u, int indent, int mode)
|
||||||
if (!dh){
|
if (!dh){
|
||||||
dh = 1;
|
dh = 1;
|
||||||
} else {
|
} else {
|
||||||
bufp += strlcpy(bufp, ", ");
|
bufp += strlcpy(bufp, ", ", sizeof(buf)-(bufp-buf));
|
||||||
}
|
}
|
||||||
sp = get_combatspell(u,i);
|
sp = get_combatspell(u,i);
|
||||||
if (sp) {
|
if (sp) {
|
||||||
int sl;
|
int sl;
|
||||||
bufp += strlcpy(bufp, spell_name(sp, u->faction->locale));
|
bufp += strlcpy(bufp, spell_name(sp, u->faction->locale), sizeof(buf)-(bufp-buf));
|
||||||
if ((sl = get_combatspelllevel(u,i)) > 0) {
|
if ((sl = get_combatspelllevel(u,i)) > 0) {
|
||||||
bufp += sprintf(bufp, " (%d)", sl);
|
bufp += sprintf(bufp, " (%d)", sl);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
bufp += strlcpy(bufp, LOC(f->locale, "nr_nospells"));
|
bufp += strlcpy(bufp, LOC(f->locale, "nr_nospells"), sizeof(buf)-(bufp-buf));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -414,8 +409,8 @@ bufunit(const faction * f, const unit * u, int indent, int mode)
|
||||||
#ifdef LASTORDER
|
#ifdef LASTORDER
|
||||||
if (!isbattle && u->lastorder) {
|
if (!isbattle && u->lastorder) {
|
||||||
char * cmd = getcommand(u->lastorder);
|
char * cmd = getcommand(u->lastorder);
|
||||||
bufp += strlcpy(bufp, ", \"");
|
bufp += strlcpy(bufp, ", \"", sizeof(buf)-(bufp-buf));
|
||||||
bufp += strlcpy(bufp, cmd);
|
bufp += strlcpy(bufp, cmd, sizeof(buf)-(bufp-buf));
|
||||||
strcpy(bufp++, "\"");
|
strcpy(bufp++, "\"");
|
||||||
free(cmd);
|
free(cmd);
|
||||||
}
|
}
|
||||||
|
@ -424,8 +419,8 @@ bufunit(const faction * f, const unit * u, int indent, int mode)
|
||||||
i = 0;
|
i = 0;
|
||||||
|
|
||||||
if (u->display && u->display[0]) {
|
if (u->display && u->display[0]) {
|
||||||
bufp += strlcpy(bufp, "; ");
|
bufp += strlcpy(bufp, "; ", sizeof(buf)-(bufp-buf));
|
||||||
bufp += strlcpy(bufp, u->display);
|
bufp += strlcpy(bufp, u->display, sizeof(buf)-(bufp-buf));
|
||||||
|
|
||||||
i = u->display[strlen(u->display) - 1];
|
i = u->display[strlen(u->display) - 1];
|
||||||
}
|
}
|
||||||
|
@ -434,9 +429,9 @@ bufunit(const faction * f, const unit * u, int indent, int mode)
|
||||||
|
|
||||||
pzTmp = uprivate(u);
|
pzTmp = uprivate(u);
|
||||||
if (u->faction == f && pzTmp) {
|
if (u->faction == f && pzTmp) {
|
||||||
bufp += strlcpy(bufp, " (Bem: ");
|
bufp += strlcpy(bufp, " (Bem: ", sizeof(buf)-(bufp-buf));
|
||||||
bufp += strlcpy(bufp, pzTmp);
|
bufp += strlcpy(bufp, pzTmp, sizeof(buf)-(bufp-buf));
|
||||||
bufp += strlcpy(bufp, ")");
|
bufp += strlcpy(bufp, ")", sizeof(buf)-(bufp-buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
dh=0;
|
dh=0;
|
||||||
|
@ -611,19 +606,19 @@ spskill(char * buffer, const struct locale * lang, const struct unit * u, skill_
|
||||||
|
|
||||||
if (!has_skill(u, sk)) return 0;
|
if (!has_skill(u, sk)) return 0;
|
||||||
|
|
||||||
pbuf += strlcpy(pbuf, ", ");
|
pbuf += strlcpy(pbuf, ", ", sizeof(buf));
|
||||||
|
|
||||||
if (!*dh) {
|
if (!*dh) {
|
||||||
pbuf += strlcpy(pbuf, LOC(lang, "nr_skills"));
|
pbuf += strlcpy(pbuf, LOC(lang, "nr_skills"), sizeof(buf)-(bufp-buf));
|
||||||
pbuf += strlcpy(pbuf, ": ");
|
pbuf += strlcpy(pbuf, ": ", sizeof(buf)-(bufp-buf));
|
||||||
*dh = 1;
|
*dh = 1;
|
||||||
}
|
}
|
||||||
pbuf += strlcpy(pbuf, skillname(sk, lang));
|
pbuf += strlcpy(pbuf, skillname(sk, lang), sizeof(buf)-(bufp-buf));
|
||||||
strcpy(pbuf++, " ");
|
strcpy(pbuf++, " ");
|
||||||
|
|
||||||
if (sk == SK_MAGIC){
|
if (sk == SK_MAGIC){
|
||||||
if (find_magetype(u) != M_GRAU){
|
if (find_magetype(u) != M_GRAU){
|
||||||
pbuf += strlcpy(pbuf, LOC(lang, mkname("school", magietypen[find_magetype(u)])));
|
pbuf += strlcpy(pbuf, LOC(lang, mkname("school", magietypen[find_magetype(u)])), sizeof(buf)-(bufp-buf));
|
||||||
strcpy(pbuf++, " ");
|
strcpy(pbuf++, " ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2817,7 +2817,6 @@ sp_summondragon(castorder *co)
|
||||||
return cast_level;
|
return cast_level;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if USE_FIREWALL
|
|
||||||
/* ------------------------------------------------------------- */
|
/* ------------------------------------------------------------- */
|
||||||
/* Name: Feuerwand
|
/* Name: Feuerwand
|
||||||
* Stufe:
|
* Stufe:
|
||||||
|
@ -3170,7 +3169,6 @@ sp_wisps(castorder *co)
|
||||||
|
|
||||||
return cast_level;
|
return cast_level;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------- */
|
/* ------------------------------------------------------------- */
|
||||||
/* Name: Unheilige Kraft
|
/* Name: Unheilige Kraft
|
||||||
|
@ -3614,6 +3612,7 @@ sp_chaossuction(castorder *co)
|
||||||
create_special_direction(rt, r, 2,
|
create_special_direction(rt, r, 2,
|
||||||
"Ein Wirbel aus reinem Chaos zieht über die Region.",
|
"Ein Wirbel aus reinem Chaos zieht über die Region.",
|
||||||
"Wirbel");
|
"Wirbel");
|
||||||
|
new_border(&bt_chaosgate, r, rt);
|
||||||
|
|
||||||
for (f = factions; f; f = f->next) freset(f, FL_DH);
|
for (f = factions; f; f = f->next) freset(f, FL_DH);
|
||||||
for (u = r->units; u; u = u->next) {
|
for (u = r->units; u; u = u->next) {
|
||||||
|
@ -10546,3 +10545,40 @@ init_spells(void)
|
||||||
register_spell(spelldaten+i);
|
register_spell(spelldaten+i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static boolean
|
||||||
|
chaosgate_valid(const border * b)
|
||||||
|
{
|
||||||
|
const attrib * a = a_findc(b->from->attribs, &at_direction);
|
||||||
|
if (!a) a = a_findc(b->to->attribs, &at_direction);
|
||||||
|
if (!a) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct region *
|
||||||
|
chaosgate_move(const border * b, struct unit * u, struct region * from, struct region * to, boolean routing)
|
||||||
|
{
|
||||||
|
if (!routing) {
|
||||||
|
int maxhp = u->hp / 4;
|
||||||
|
if (maxhp<u->number) maxhp = u->number;
|
||||||
|
u->hp = maxhp;
|
||||||
|
}
|
||||||
|
return to;
|
||||||
|
}
|
||||||
|
|
||||||
|
border_type bt_chaosgate = {
|
||||||
|
"chaosgate",
|
||||||
|
b_transparent, /* transparent */
|
||||||
|
NULL, /* init */
|
||||||
|
NULL, /* destroy */
|
||||||
|
NULL, /* read */
|
||||||
|
NULL, /* write */
|
||||||
|
b_blocknone, /* block */
|
||||||
|
NULL, /* name */
|
||||||
|
b_rinvisible, /* rvisible */
|
||||||
|
b_finvisible, /* fvisible */
|
||||||
|
b_uinvisible, /* uvisible */
|
||||||
|
chaosgate_valid,
|
||||||
|
chaosgate_move
|
||||||
|
};
|
||||||
|
|
||||||
|
|
|
@ -265,11 +265,11 @@ extern "C" {
|
||||||
|
|
||||||
/* ------------------------------------------------------------- */
|
/* ------------------------------------------------------------- */
|
||||||
|
|
||||||
#if USE_FIREWALL
|
|
||||||
/* für Feuerwände: in movement muß das noch explizit getestet werden.
|
/* für Feuerwände: in movement muß das noch explizit getestet werden.
|
||||||
* besser wäre eine blcok_type::move() routine, die den effekt
|
* besser wäre eine blcok_type::move() routine, die den effekt
|
||||||
* der Bewegung auf eine struct unit anwendet.
|
* der Bewegung auf eine struct unit anwendet.
|
||||||
*/
|
*/
|
||||||
|
extern struct border_type bt_chaosgate;
|
||||||
extern struct border_type bt_firewall;
|
extern struct border_type bt_firewall;
|
||||||
extern struct border_type bt_wisps;
|
extern struct border_type bt_wisps;
|
||||||
typedef struct wall_data {
|
typedef struct wall_data {
|
||||||
|
@ -277,7 +277,6 @@ extern "C" {
|
||||||
int force;
|
int force;
|
||||||
boolean active;
|
boolean active;
|
||||||
} wall_data;
|
} wall_data;
|
||||||
#endif
|
|
||||||
|
|
||||||
extern struct attrib_type at_cursewall;
|
extern struct attrib_type at_cursewall;
|
||||||
extern struct attrib_type at_unitdissolve;
|
extern struct attrib_type at_unitdissolve;
|
||||||
|
|
|
@ -34,10 +34,11 @@
|
||||||
#define NEW_MIGRATION 1
|
#define NEW_MIGRATION 1
|
||||||
#define ASTRAL_HUNGER
|
#define ASTRAL_HUNGER
|
||||||
#define NEWATSROI 0
|
#define NEWATSROI 0
|
||||||
|
|
||||||
#define HUNGER_REDUCES_SKILL /* Hunger reduziert den Talentwert
|
#define HUNGER_REDUCES_SKILL /* Hunger reduziert den Talentwert
|
||||||
auf die Hälfte */
|
auf die Hälfte */
|
||||||
|
|
||||||
|
#undef ASTRAL_ITEM_RESTRICTIONS /* keine grossen dinge im astralraum */
|
||||||
|
|
||||||
#define MUSEUM_MODULE
|
#define MUSEUM_MODULE
|
||||||
#define ARENA_MODULE
|
#define ARENA_MODULE
|
||||||
#define WORMHOLE_MODULE
|
#define WORMHOLE_MODULE
|
||||||
|
|
|
@ -34,3 +34,5 @@
|
||||||
#define PEASANTS_DO_NOT_STARVE 0
|
#define PEASANTS_DO_NOT_STARVE 0
|
||||||
#define NEW_MIGRATION 1
|
#define NEW_MIGRATION 1
|
||||||
#define ASTRAL_HUNGER
|
#define ASTRAL_HUNGER
|
||||||
|
|
||||||
|
#undef ASTRAL_ITEM_RESTRICTIONS /* keine grossen dinge im astralraum */
|
||||||
|
|
|
@ -12,6 +12,7 @@ SOURCES =
|
||||||
#<dl>malloc.c
|
#<dl>malloc.c
|
||||||
attrib.c
|
attrib.c
|
||||||
base36.c
|
base36.c
|
||||||
|
bsdstring.c
|
||||||
command.c
|
command.c
|
||||||
crmessage.c
|
crmessage.c
|
||||||
cvector.c
|
cvector.c
|
||||||
|
|
61
src/common/util/bsdstring.c
Normal file
61
src/common/util/bsdstring.c
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
#include <config.h>
|
||||||
|
#include "bsdstring.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#if !defined(HAVE_STRLCPY)
|
||||||
|
INLINE_FUNCTION size_t
|
||||||
|
strlcpy(char *dst, const char *src, size_t siz) /* copied from OpenBSD source code */
|
||||||
|
{
|
||||||
|
register char *d = dst;
|
||||||
|
register const char *s = src;
|
||||||
|
register size_t n = siz;
|
||||||
|
|
||||||
|
/* Copy as many bytes as will fit */
|
||||||
|
if (n != 0 && --n != 0) {
|
||||||
|
do {
|
||||||
|
if ((*d++ = *s++) == 0)
|
||||||
|
break;
|
||||||
|
} while (--n != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Not enough room in dst, add NUL and traverse rest of src */
|
||||||
|
if (n == 0) {
|
||||||
|
if (siz != 0)
|
||||||
|
*d = '\0'; /* NUL-terminate dst */
|
||||||
|
while (*s++)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
return(s - src - 1); /* count does not include NUL */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
INLINE_FUNCTION size_t
|
||||||
|
strlcat(char * dst, const char * src, size_t siz)
|
||||||
|
{
|
||||||
|
register char *d = dst;
|
||||||
|
register const char *s = src;
|
||||||
|
register size_t n = siz;
|
||||||
|
size_t dlen;
|
||||||
|
|
||||||
|
/* Find the end of dst and adjust bytes left but don't go past end */
|
||||||
|
while (*d != '\0' && n-- != 0)
|
||||||
|
d++;
|
||||||
|
dlen = d - dst;
|
||||||
|
n = siz - dlen;
|
||||||
|
|
||||||
|
if (n == 0)
|
||||||
|
return(dlen + strlen(s));
|
||||||
|
while (*s != '\0') {
|
||||||
|
if (n != 1) {
|
||||||
|
*d++ = *s;
|
||||||
|
n--;
|
||||||
|
}
|
||||||
|
s++;
|
||||||
|
}
|
||||||
|
*d = '\0';
|
||||||
|
|
||||||
|
return(dlen + (s - src)); /* count does not include NUL */
|
||||||
|
}
|
||||||
|
#endif
|
13
src/common/util/bsdstring.h
Normal file
13
src/common/util/bsdstring.h
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
#ifndef UTIL_BSDSTRING_H
|
||||||
|
#define UTIL_BSDSTRING_H
|
||||||
|
|
||||||
|
#if !defined(HAVE_STRLCPY)
|
||||||
|
# ifdef HAVE_INLINE
|
||||||
|
# include "bsdstring.c"
|
||||||
|
# else
|
||||||
|
extern size_t strlcpy(char *dst, const char *src, size_t siz);
|
||||||
|
extern size_t strlcat(char * dst, const char * src, size_t siz);
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
|
@ -179,6 +179,9 @@
|
||||||
<File
|
<File
|
||||||
RelativePath=".\base36.h">
|
RelativePath=".\base36.h">
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\bsdstring.h">
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\command.h">
|
RelativePath=".\command.h">
|
||||||
</File>
|
</File>
|
||||||
|
|
|
@ -148,6 +148,9 @@ typedef struct stat stat_type;
|
||||||
# define R_OK 4
|
# define R_OK 4
|
||||||
# define HAVE__MKDIR_WITHOUT_PERMISSION
|
# define HAVE__MKDIR_WITHOUT_PERMISSION
|
||||||
|
|
||||||
|
#define HAVE_INLINE
|
||||||
|
#define INLINE_FUNCTION __inline
|
||||||
|
|
||||||
# define snprintf _snprintf
|
# define snprintf _snprintf
|
||||||
# define HAVE_SNPRINTF
|
# define HAVE_SNPRINTF
|
||||||
|
|
||||||
|
|
|
@ -1010,6 +1010,30 @@ nothing(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
fix_chaosgates(void)
|
||||||
|
{
|
||||||
|
region * r;
|
||||||
|
for (r = regions; r; r=r->next) {
|
||||||
|
const attrib *a = a_findc(r->attribs, &at_direction);
|
||||||
|
|
||||||
|
while (a!=NULL) {
|
||||||
|
spec_direction * sd = (spec_direction *)a->data.v;
|
||||||
|
region * r2 = findregion(sd->x, sd->y);
|
||||||
|
border * b = get_borders(r, r2);
|
||||||
|
while (b) {
|
||||||
|
if (b->type==&bt_chaosgate) break;
|
||||||
|
b = b->next;
|
||||||
|
}
|
||||||
|
if (b==NULL) {
|
||||||
|
b = new_border(&bt_chaosgate, r, r2);
|
||||||
|
}
|
||||||
|
a = a->nexttype;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
korrektur(void)
|
korrektur(void)
|
||||||
{
|
{
|
||||||
|
@ -1024,6 +1048,7 @@ korrektur(void)
|
||||||
do_once("zvrm", nothing());
|
do_once("zvrm", nothing());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
do_once("chgt", fix_chaosgates());
|
||||||
fix_astralplane();
|
fix_astralplane();
|
||||||
fix_firewalls();
|
fix_firewalls();
|
||||||
fix_gates();
|
fix_gates();
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
<param name="GiveRestriction" value="3"/>
|
<param name="GiveRestriction" value="3"/>
|
||||||
<param name="hunger.long" value="1"/>
|
<param name="hunger.long" value="1"/>
|
||||||
<param name="database.gameid" value="0"/>
|
<param name="database.gameid" value="0"/>
|
||||||
<param name="rules.check_overload" value="1"/>
|
<param name="rules.check_overload" value="0"/>
|
||||||
<param name="firstturn" value="184"/>
|
<param name="firstturn" value="184"/>
|
||||||
<param name="report.mailit" value="/usr/sbin:$HOME/eressea/bin:/bin:/usr/bin:/usr/local/bin"/>
|
<param name="report.mailit" value="/usr/sbin:$HOME/eressea/bin:/bin:/usr/bin:/usr/local/bin"/>
|
||||||
</game>
|
</game>
|
||||||
|
|
Loading…
Reference in a new issue