forked from github/server
asciification
This commit is contained in:
parent
642d043e7c
commit
5868316537
|
@ -39,9 +39,9 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
/* ------------------------------------------------------------- */
|
/* ------------------------------------------------------------- */
|
||||||
/* Ausgabe der Spruchbeschreibungen
|
/* Ausgabe der Spruchbeschreibungen
|
||||||
* Anzeige des Spruchs nur, wenn die Stufe des besten Magiers vorher
|
* Anzeige des Spruchs nur, wenn die Stufe des besten Magiers vorher
|
||||||
* kleiner war (u->faction->seenspells). Ansonsten muss nur geprüft
|
* kleiner war (u->faction->seenspells). Ansonsten muss nur geprueft
|
||||||
* werden, ob dieser Magier den Spruch schon kennt, und andernfalls der
|
* werden, ob dieser Magier den Spruch schon kennt, und andernfalls der
|
||||||
* Spruch zu seiner List-of-known-spells hinzugefügt werden.
|
* Spruch zu seiner List-of-known-spells hinzugefuegt werden.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int read_seenspells(variant *var, void *owner, struct gamedata *data)
|
static int read_seenspells(variant *var, void *owner, struct gamedata *data)
|
||||||
|
|
136
src/battle.c
136
src/battle.c
|
@ -303,11 +303,11 @@ static int dead_fighters(const fighter * df)
|
||||||
}
|
}
|
||||||
|
|
||||||
fighter *select_corpse(battle * b, fighter * af)
|
fighter *select_corpse(battle * b, fighter * af)
|
||||||
/* W<EFBFBD>hlt eine Leiche aus, der af hilft. casualties ist die Anzahl der
|
/* Waehlt eine Leiche aus, der af hilft. casualties ist die Anzahl der
|
||||||
* Toten auf allen Seiten (im Array). Wenn af == NULL, wird die
|
* Toten auf allen Seiten (im Array). Wenn af == NULL, wird die
|
||||||
* Parteizugeh<EFBFBD>rigkeit ignoriert, und irgendeine Leiche genommen.
|
* Parteizugehoerigkeit ignoriert, und irgendeine Leiche genommen.
|
||||||
*
|
*
|
||||||
* Untote werden nicht ausgew<EFBFBD>hlt (casualties, not dead) */
|
* Untote werden nicht ausgewaehlt (casualties, not dead) */
|
||||||
{
|
{
|
||||||
int si, maxcasualties = 0;
|
int si, maxcasualties = 0;
|
||||||
fighter *df;
|
fighter *df;
|
||||||
|
@ -323,7 +323,7 @@ fighter *select_corpse(battle * b, fighter * af)
|
||||||
side *s;
|
side *s;
|
||||||
for (s = b->sides; s != b->sides + b->nsides; ++s) {
|
for (s = b->sides; s != b->sides + b->nsides; ++s) {
|
||||||
for (df = s->fighters; df; df = df->next) {
|
for (df = s->fighters; df; df = df->next) {
|
||||||
/* Geflohene haben auch 0 hp, d<EFBFBD>rfen hier aber nicht ausgew<65>hlt
|
/* Geflohene haben auch 0 hp, duerfen hier aber nicht ausgewaehlt
|
||||||
* werden! */
|
* werden! */
|
||||||
int dead = dead_fighters(df);
|
int dead = dead_fighters(df);
|
||||||
if (!playerrace(u_race(df->unit)))
|
if (!playerrace(u_race(df->unit)))
|
||||||
|
@ -731,16 +731,16 @@ weapon_effskill(troop t, troop enemy, const weapon * w,
|
||||||
|
|
||||||
if (t.index < tf->elvenhorses) {
|
if (t.index < tf->elvenhorses) {
|
||||||
/* Elfenpferde: Helfen dem Reiter, egal ob und welche Waffe. Das ist
|
/* Elfenpferde: Helfen dem Reiter, egal ob und welche Waffe. Das ist
|
||||||
* eleganter, und vor allem einfacher, sonst mu<EFBFBD> man noch ein
|
* eleganter, und vor allem einfacher, sonst muss man noch ein
|
||||||
* WMF_ELVENHORSE einbauen. */
|
* WMF_ELVENHORSE einbauen. */
|
||||||
skill += 2;
|
skill += 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (skill > 0 && !attacking && missile) {
|
if (skill > 0 && !attacking && missile) {
|
||||||
/*
|
/*
|
||||||
* Wenn ich verteidige, und nicht direkt meinem Feind gegen<EFBFBD>berstehe,
|
* Wenn ich verteidige, und nicht direkt meinem Feind gegenueberstehe,
|
||||||
* halbiert sich mein Skill: (z.B. gegen Fernk<EFBFBD>mpfer. Nahk<EFBFBD>mpfer
|
* halbiert sich mein Skill: (z.B. gegen Fernkaempfer. Nahkaempfer
|
||||||
* k<EFBFBD>nnen mich eh nicht treffen)
|
* koennen mich eh nicht treffen)
|
||||||
*/
|
*/
|
||||||
skill /= 2;
|
skill /= 2;
|
||||||
}
|
}
|
||||||
|
@ -779,9 +779,9 @@ const armor_type *select_armor(troop t, bool shield)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hier ist zu beachten, ob und wie sich Zauber und Artefakte, die
|
/* Hier ist zu beachten, ob und wie sich Zauber und Artefakte, die
|
||||||
* R<EFBFBD>stungschutz geben, addieren.
|
* Ruestungschutz geben, addieren.
|
||||||
* - Artefakt "trollbelt" gibt R<EFBFBD>stung +1
|
* - Artefakt "trollbelt" gibt Ruestung +1
|
||||||
* - Zauber Rindenhaut gibt R<EFBFBD>stung +3
|
* - Zauber Rindenhaut gibt Ruestung +3
|
||||||
*/
|
*/
|
||||||
static int trollbelts(const unit *u) {
|
static int trollbelts(const unit *u) {
|
||||||
const struct resource_type *belt = rt_find("trollbelt");
|
const struct resource_type *belt = rt_find("trollbelt");
|
||||||
|
@ -799,7 +799,7 @@ int select_magicarmor(troop t)
|
||||||
return ma;
|
return ma;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Sind side ds und Magier des meffect verb<EFBFBD>ndet, dann return 1*/
|
/* Sind side ds und Magier des meffect verbuendet, dann return 1*/
|
||||||
bool meffect_protection(battle * b, meffect * s, side * ds)
|
bool meffect_protection(battle * b, meffect * s, side * ds)
|
||||||
{
|
{
|
||||||
UNUSED_ARG(b);
|
UNUSED_ARG(b);
|
||||||
|
@ -837,7 +837,7 @@ void rmfighter(fighter * df, int i)
|
||||||
assert(df->alive >= i);
|
assert(df->alive >= i);
|
||||||
assert(df->alive <= df->unit->number);
|
assert(df->alive <= df->unit->number);
|
||||||
|
|
||||||
/* erst ziehen wir die Anzahl der Personen von den K<EFBFBD>mpfern in der
|
/* erst ziehen wir die Anzahl der Personen von den Kaempfern in der
|
||||||
* Schlacht, dann von denen auf dieser Seite ab*/
|
* Schlacht, dann von denen auf dieser Seite ab*/
|
||||||
df->side->alive -= i;
|
df->side->alive -= i;
|
||||||
df->side->battle->alive -= i;
|
df->side->battle->alive -= i;
|
||||||
|
@ -1031,15 +1031,15 @@ int calculate_armor(troop dt, const weapon_type *dwtype, const weapon_type *awty
|
||||||
total_armor = 0;
|
total_armor = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* nat<EFBFBD>rliche R<>stung */
|
/* natuerliche Ruestung */
|
||||||
nat_armor = natural_armor(du);
|
nat_armor = natural_armor(du);
|
||||||
|
|
||||||
/* magische R<EFBFBD>stung durch Artefakte oder Spr<70>che */
|
/* magische Ruestung durch Artefakte oder Sprueche */
|
||||||
/* Momentan nur Trollg<EFBFBD>rtel und Werwolf-Eigenschaft */
|
/* Momentan nur Trollguertel und Werwolf-Eigenschaft */
|
||||||
magic_armor = select_magicarmor(dt);
|
magic_armor = select_magicarmor(dt);
|
||||||
|
|
||||||
if (rule_nat_armor == 0) {
|
if (rule_nat_armor == 0) {
|
||||||
/* nat<EFBFBD>rliche R<>stung ist halbkumulativ */
|
/* natuerliche Ruestung ist halbkumulativ */
|
||||||
if (total_armor > 0) {
|
if (total_armor > 0) {
|
||||||
total_armor += nat_armor / 2;
|
total_armor += nat_armor / 2;
|
||||||
}
|
}
|
||||||
|
@ -1124,7 +1124,7 @@ static bool survives(fighter *af, troop dt, battle *b) {
|
||||||
const unit *du = af->unit;
|
const unit *du = af->unit;
|
||||||
const fighter *df = dt.fighter;
|
const fighter *df = dt.fighter;
|
||||||
|
|
||||||
if (df->person[dt.index].hp > 0) { /* Hat <EFBFBD>berlebt */
|
if (df->person[dt.index].hp > 0) { /* Hat ueberlebt */
|
||||||
demon_dazzle(af, dt);
|
demon_dazzle(af, dt);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -1261,7 +1261,7 @@ static int apply_magicshield(int reduced_damage, fighter *df,
|
||||||
reduced_damage -= hp;
|
reduced_damage -= hp;
|
||||||
me->duration -= hp;
|
me->duration -= hp;
|
||||||
}
|
}
|
||||||
/* gibt R<EFBFBD>stung +effect f<>r duration Treffer */
|
/* gibt Ruestung +effect fuer duration Treffer */
|
||||||
if (me->typ == SHIELD_ARMOR) {
|
if (me->typ == SHIELD_ARMOR) {
|
||||||
reduced_damage -= me->effect;
|
reduced_damage -= me->effect;
|
||||||
if (reduced_damage < 0) reduced_damage = 0;
|
if (reduced_damage < 0) reduced_damage = 0;
|
||||||
|
@ -1743,7 +1743,7 @@ void do_combatmagic(battle * b, combatmagic_t was)
|
||||||
unit *caster = mage;
|
unit *caster = mage;
|
||||||
|
|
||||||
if (fig->alive <= 0)
|
if (fig->alive <= 0)
|
||||||
continue; /* fighter kann im Kampf get<EFBFBD>tet worden sein */
|
continue; /* fighter kann im Kampf getoetet worden sein */
|
||||||
|
|
||||||
level = effskill(mage, SK_MAGIC, r);
|
level = effskill(mage, SK_MAGIC, r);
|
||||||
if (level > 0) {
|
if (level > 0) {
|
||||||
|
@ -1847,12 +1847,12 @@ static void do_combatspell(troop at)
|
||||||
|
|
||||||
sp = get_combatspell(mage, 1);
|
sp = get_combatspell(mage, 1);
|
||||||
if (sp == NULL) {
|
if (sp == NULL) {
|
||||||
fi->magic = 0; /* Hat keinen Kampfzauber, k<EFBFBD>mpft nichtmagisch weiter */
|
fi->magic = 0; /* Hat keinen Kampfzauber, kaempft nichtmagisch weiter */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ord = create_order(K_CAST, lang, "'%s'", spell_name(sp, lang));
|
ord = create_order(K_CAST, lang, "'%s'", spell_name(sp, lang));
|
||||||
if (!cancast(mage, sp, 1, 1, ord)) {
|
if (!cancast(mage, sp, 1, 1, ord)) {
|
||||||
fi->magic = 0; /* Kann nicht mehr Zaubern, k<EFBFBD>mpft nichtmagisch weiter */
|
fi->magic = 0; /* Kann nicht mehr Zaubern, kaempft nichtmagisch weiter */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1878,7 +1878,7 @@ static void do_combatspell(troop at)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Antimagie die Fehlschlag erh<EFBFBD>ht */
|
/* Antimagie die Fehlschlag erhoeht */
|
||||||
if (rng_int() % 100 < fumblechance) {
|
if (rng_int() % 100 < fumblechance) {
|
||||||
report_failed_spell(b, mage, sp);
|
report_failed_spell(b, mage, sp);
|
||||||
pay_spell(mage, NULL, sp, level, 1);
|
pay_spell(mage, NULL, sp, level, 1);
|
||||||
|
@ -1897,7 +1897,7 @@ static void do_combatspell(troop at)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Sonderattacken: Monster patzern nicht und zahlen auch keine
|
/* Sonderattacken: Monster patzern nicht und zahlen auch keine
|
||||||
* Spruchkosten. Da die Spruchst<EFBFBD>rke direkt durch den Level bestimmt
|
* Spruchkosten. Da die Spruchstaerke direkt durch den Level bestimmt
|
||||||
* wird, wirkt auch keine Antimagie (wird sonst in spellpower
|
* wird, wirkt auch keine Antimagie (wird sonst in spellpower
|
||||||
* gemacht) */
|
* gemacht) */
|
||||||
|
|
||||||
|
@ -1948,7 +1948,7 @@ int skilldiff(troop at, troop dt, int dist)
|
||||||
if (b->attribs) {
|
if (b->attribs) {
|
||||||
curse *c = get_curse(b->attribs, &ct_strongwall);
|
curse *c = get_curse(b->attribs, &ct_strongwall);
|
||||||
if (curse_active(c)) {
|
if (curse_active(c)) {
|
||||||
/* wirkt auf alle Geb<EFBFBD>ude */
|
/* wirkt auf alle Gebaeude */
|
||||||
skdiff -= curse_geteffect_int(c);
|
skdiff -= curse_geteffect_int(c);
|
||||||
is_protected = 2;
|
is_protected = 2;
|
||||||
}
|
}
|
||||||
|
@ -2037,7 +2037,7 @@ int hits(troop at, troop dt, weapon * awp)
|
||||||
}
|
}
|
||||||
|
|
||||||
skdiff = skilldiff(at, dt, dist);
|
skdiff = skilldiff(at, dt, dist);
|
||||||
/* Verteidiger bekommt eine R<EFBFBD>stung */
|
/* Verteidiger bekommt eine Ruestung */
|
||||||
armor = select_armor(dt, true);
|
armor = select_armor(dt, true);
|
||||||
if (dwp == NULL || (dwp->type->flags & WTF_USESHIELD)) {
|
if (dwp == NULL || (dwp->type->flags & WTF_USESHIELD)) {
|
||||||
shield = select_armor(dt, false);
|
shield = select_armor(dt, false);
|
||||||
|
@ -2066,7 +2066,7 @@ void damage_building(battle * b, building * bldg, int damage_abs)
|
||||||
bldg->size -= damage_abs;
|
bldg->size -= damage_abs;
|
||||||
if (bldg->size < 1) bldg->size = 1;
|
if (bldg->size < 1) bldg->size = 1;
|
||||||
|
|
||||||
/* Wenn Burg, dann gucken, ob die Leute alle noch in das Geb<EFBFBD>ude passen. */
|
/* Wenn Burg, dann gucken, ob die Leute alle noch in das Gebaeude passen. */
|
||||||
|
|
||||||
if (bldg->type->flags & BTF_FORTIFICATION) {
|
if (bldg->type->flags & BTF_FORTIFICATION) {
|
||||||
side *s;
|
side *s;
|
||||||
|
@ -2124,7 +2124,7 @@ static void attack(battle * b, troop ta, const att * a, int numattack)
|
||||||
switch (a->type) {
|
switch (a->type) {
|
||||||
case AT_COMBATSPELL:
|
case AT_COMBATSPELL:
|
||||||
/* Magier versuchen immer erstmal zu zaubern, erst wenn das
|
/* Magier versuchen immer erstmal zu zaubern, erst wenn das
|
||||||
* fehlschl<EFBFBD>gt, wird af->magic == 0 und der Magier k<EFBFBD>mpft
|
* fehlschlaegt, wird af->magic == 0 und der Magier kaempft
|
||||||
* konventionell weiter */
|
* konventionell weiter */
|
||||||
if (numattack == 0 && af->magic > 0) {
|
if (numattack == 0 && af->magic > 0) {
|
||||||
/* wenn der magier in die potenzielle Reichweite von Attacken des
|
/* wenn der magier in die potenzielle Reichweite von Attacken des
|
||||||
|
@ -2136,7 +2136,7 @@ static void attack(battle * b, troop ta, const att * a, int numattack)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case AT_STANDARD: /* Waffen, mag. Gegenst<EFBFBD>nde, Kampfzauber */
|
case AT_STANDARD: /* Waffen, mag. Gegenstaende, Kampfzauber */
|
||||||
if (numattack > 0 || af->magic <= 0) {
|
if (numattack > 0 || af->magic <= 0) {
|
||||||
weapon *wp = ta.fighter->person[ta.index].missile;
|
weapon *wp = ta.fighter->person[ta.index].missile;
|
||||||
int melee =
|
int melee =
|
||||||
|
@ -2153,7 +2153,7 @@ static void attack(battle * b, troop ta, const att * a, int numattack)
|
||||||
bool standard_attack = true;
|
bool standard_attack = true;
|
||||||
bool reload = false;
|
bool reload = false;
|
||||||
/* spezialattacken der waffe nur, wenn erste attacke in der runde.
|
/* spezialattacken der waffe nur, wenn erste attacke in der runde.
|
||||||
* sonst helden mit feuerschwertern zu m<EFBFBD>chtig */
|
* sonst helden mit feuerschwertern zu maechtig */
|
||||||
if (numattack == 0 && wp && wp->type->attack) {
|
if (numattack == 0 && wp && wp->type->attack) {
|
||||||
int dead = 0;
|
int dead = 0;
|
||||||
standard_attack = wp->type->attack(&ta, wp->type, &dead);
|
standard_attack = wp->type->attack(&ta, wp->type, &dead);
|
||||||
|
@ -2197,7 +2197,7 @@ static void attack(battle * b, troop ta, const att * a, int numattack)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case AT_SPELL: /* Extra-Spr<EFBFBD>che. Kampfzauber in AT_COMBATSPELL! */
|
case AT_SPELL: /* Extra-Sprueche. Kampfzauber in AT_COMBATSPELL! */
|
||||||
do_extra_spell(ta, a);
|
do_extra_spell(ta, a);
|
||||||
break;
|
break;
|
||||||
case AT_NATURAL:
|
case AT_NATURAL:
|
||||||
|
@ -2282,14 +2282,14 @@ void do_attack(fighter * af)
|
||||||
|
|
||||||
assert(au && au->number);
|
assert(au && au->number);
|
||||||
/* Da das Zuschlagen auf Einheiten und nicht auf den einzelnen
|
/* Da das Zuschlagen auf Einheiten und nicht auf den einzelnen
|
||||||
* K<EFBFBD>mpfern beruht, darf die Reihenfolge und Gr<EFBFBD><EFBFBD>e der Einheit keine
|
* Kaempfern beruht, darf die Reihenfolge und Groesse der Einheit keine
|
||||||
* Rolle spielen, Das tut sie nur dann, wenn jeder, der am Anfang der
|
* Rolle spielen, Das tut sie nur dann, wenn jeder, der am Anfang der
|
||||||
* Runde lebte, auch zuschlagen darf. Ansonsten ist der, der zuf<EFBFBD>llig
|
* Runde lebte, auch zuschlagen darf. Ansonsten ist der, der zufaellig
|
||||||
* mit einer gro<EFBFBD>en Einheit zuerst drankommt, extrem bevorteilt. */
|
* mit einer grossen Einheit zuerst drankommt, extrem bevorteilt. */
|
||||||
ta.index = af->fighting;
|
ta.index = af->fighting;
|
||||||
|
|
||||||
while (ta.index--) {
|
while (ta.index--) {
|
||||||
/* Wir suchen eine beliebige Feind-Einheit aus. An der k<EFBFBD>nnen
|
/* Wir suchen eine beliebige Feind-Einheit aus. An der koennen
|
||||||
* wir feststellen, ob noch jemand da ist. */
|
* wir feststellen, ob noch jemand da ist. */
|
||||||
int apr, attacks = attacks_per_round(ta);
|
int apr, attacks = attacks_per_round(ta);
|
||||||
if (!count_enemies(b, af, FIGHT_ROW, LAST_ROW, SELECT_FIND))
|
if (!count_enemies(b, af, FIGHT_ROW, LAST_ROW, SELECT_FIND))
|
||||||
|
@ -2314,7 +2314,7 @@ void do_attack(fighter * af)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Der letzte Katapultsch<EFBFBD>tze setzt die
|
/* Der letzte Katapultschuetze setzt die
|
||||||
* Ladezeit neu und generiert die Meldung. */
|
* Ladezeit neu und generiert die Meldung. */
|
||||||
if (af->catmsg >= 0) {
|
if (af->catmsg >= 0) {
|
||||||
struct message *m =
|
struct message *m =
|
||||||
|
@ -2372,7 +2372,7 @@ static int horse_fleeing_bonus(const unit * u)
|
||||||
static int fleechance(unit * u)
|
static int fleechance(unit * u)
|
||||||
{
|
{
|
||||||
int p = flee_chance_base; /* Fluchtwahrscheinlichkeit in % */
|
int p = flee_chance_base; /* Fluchtwahrscheinlichkeit in % */
|
||||||
/* Einheit u versucht, dem Get<EFBFBD>mmel zu entkommen */
|
/* Einheit u versucht, dem Getuemmel zu entkommen */
|
||||||
|
|
||||||
p += (effskill(u, SK_STEALTH, NULL) * flee_chance_skill_bonus);
|
p += (effskill(u, SK_STEALTH, NULL) * flee_chance_skill_bonus);
|
||||||
p += horse_fleeing_bonus(u);
|
p += horse_fleeing_bonus(u);
|
||||||
|
@ -2660,7 +2660,7 @@ static void aftermath(battle * b)
|
||||||
for (s = b->sides; s != b->sides + b->nsides; ++s) {
|
for (s = b->sides; s != b->sides + b->nsides; ++s) {
|
||||||
int snumber = 0;
|
int snumber = 0;
|
||||||
fighter *df;
|
fighter *df;
|
||||||
bool relevant = false; /* Kampf relevant f<EFBFBD>r diese Partei? */
|
bool relevant = false; /* Kampf relevant fuer diese Partei? */
|
||||||
if (!fval(s, SIDE_HASGUARDS)) {
|
if (!fval(s, SIDE_HASGUARDS)) {
|
||||||
relevant = true;
|
relevant = true;
|
||||||
}
|
}
|
||||||
|
@ -2700,7 +2700,7 @@ static void aftermath(battle * b)
|
||||||
/* Report the casualties */
|
/* Report the casualties */
|
||||||
reportcasualties(b, df, dead);
|
reportcasualties(b, df, dead);
|
||||||
|
|
||||||
/* Zuerst d<EFBFBD>rfen die Feinde pl<70>ndern, die mitgenommenen Items
|
/* Zuerst duerfen die Feinde pluendern, die mitgenommenen Items
|
||||||
* stehen in fig->run.items. Dann werden die Fliehenden auf
|
* stehen in fig->run.items. Dann werden die Fliehenden auf
|
||||||
* die leere (tote) alte Einheit gemapt */
|
* die leere (tote) alte Einheit gemapt */
|
||||||
if (!fval(df, FIG_NOLOOT)) {
|
if (!fval(df, FIG_NOLOOT)) {
|
||||||
|
@ -2735,7 +2735,7 @@ static void aftermath(battle * b)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (df->alive == 0) {
|
if (df->alive == 0) {
|
||||||
/* alle sind tot, niemand geflohen. Einheit aufl<EFBFBD>sen */
|
/* alle sind tot, niemand geflohen. Einheit aufloesen */
|
||||||
df->run.number = 0;
|
df->run.number = 0;
|
||||||
df->run.hp = 0;
|
df->run.hp = 0;
|
||||||
|
|
||||||
|
@ -2797,7 +2797,7 @@ static void aftermath(battle * b)
|
||||||
|
|
||||||
/* Wir benutzen drifted, um uns zu merken, ob ein Schiff
|
/* Wir benutzen drifted, um uns zu merken, ob ein Schiff
|
||||||
* schonmal Schaden genommen hat. (moved und drifted
|
* schonmal Schaden genommen hat. (moved und drifted
|
||||||
* sollten in flags <EFBFBD>berf<EFBFBD>hrt werden */
|
* sollten in flags ueberfuehrt werden */
|
||||||
|
|
||||||
for (s = b->sides; s != b->sides + b->nsides; ++s) {
|
for (s = b->sides; s != b->sides + b->nsides; ++s) {
|
||||||
fighter *df;
|
fighter *df;
|
||||||
|
@ -2818,7 +2818,7 @@ static void aftermath(battle * b)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Wenn sich die Einheit auf einem Schiff befindet, wird
|
/* Wenn sich die Einheit auf einem Schiff befindet, wird
|
||||||
* dieses Schiff besch<EFBFBD>digt. Andernfalls ein Schiff, welches
|
* dieses Schiff beschaedigt. Andernfalls ein Schiff, welches
|
||||||
* evt. zuvor verlassen wurde. */
|
* evt. zuvor verlassen wurde. */
|
||||||
if (ships_damaged) {
|
if (ships_damaged) {
|
||||||
ship *sh;
|
ship *sh;
|
||||||
|
@ -3114,8 +3114,8 @@ fighter *make_fighter(battle * b, unit * u, side * s1, bool attack)
|
||||||
else if (!stealthfaction) {
|
else if (!stealthfaction) {
|
||||||
s1->stealthfaction = NULL;
|
s1->stealthfaction = NULL;
|
||||||
}
|
}
|
||||||
/* Zu diesem Zeitpunkt ist attacked noch 0, da die Einheit f<EFBFBD>r noch
|
/* Zu diesem Zeitpunkt ist attacked noch 0, da die Einheit fuer noch
|
||||||
* keinen Kampf ausgew<EFBFBD>hlt wurde (sonst w<EFBFBD>rde ein fighter existieren) */
|
* keinen Kampf ausgewaehlt wurde (sonst wuerde ein fighter existieren) */
|
||||||
}
|
}
|
||||||
fig = (struct fighter*)calloc(1, sizeof(struct fighter));
|
fig = (struct fighter*)calloc(1, sizeof(struct fighter));
|
||||||
|
|
||||||
|
@ -3123,8 +3123,8 @@ fighter *make_fighter(battle * b, unit * u, side * s1, bool attack)
|
||||||
s1->fighters = fig;
|
s1->fighters = fig;
|
||||||
|
|
||||||
fig->unit = u;
|
fig->unit = u;
|
||||||
/* In einer Burg mu<EFBFBD> man a) nicht Angreifer sein, und b) drin sein, und
|
/* In einer Burg muss man a) nicht Angreifer sein, und b) drin sein, und
|
||||||
* c) noch Platz finden. d) menschan<EFBFBD>hnlich sein */
|
* c) noch Platz finden. d) menschanaehnlich sein */
|
||||||
if (attack) {
|
if (attack) {
|
||||||
set_attacker(fig);
|
set_attacker(fig);
|
||||||
}
|
}
|
||||||
|
@ -3150,7 +3150,7 @@ fighter *make_fighter(battle * b, unit * u, side * s1, bool attack)
|
||||||
assert(h);
|
assert(h);
|
||||||
rest = u->hp % u->number;
|
rest = u->hp % u->number;
|
||||||
|
|
||||||
/* Effekte von Spr<EFBFBD>chen */
|
/* Effekte von Spruechen */
|
||||||
|
|
||||||
if (u->attribs) {
|
if (u->attribs) {
|
||||||
curse *c = get_curse(u->attribs, &ct_speed);
|
curse *c = get_curse(u->attribs, &ct_speed);
|
||||||
|
@ -3189,8 +3189,8 @@ fighter *make_fighter(battle * b, unit * u, side * s1, bool attack)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* F<EFBFBD>r alle Waffengattungen wird bestimmt, wie viele der Personen mit
|
/* Fuer alle Waffengattungen wird bestimmt, wie viele der Personen mit
|
||||||
* ihr k<EFBFBD>mpfen k<EFBFBD>nnten, und was ihr Wert darin ist. */
|
* ihr kaempfen koennten, und was ihr Wert darin ist. */
|
||||||
if (u_race(u)->battle_flags & BF_EQUIPMENT) {
|
if (u_race(u)->battle_flags & BF_EQUIPMENT) {
|
||||||
int owp[WMAX];
|
int owp[WMAX];
|
||||||
int dwp[WMAX];
|
int dwp[WMAX];
|
||||||
|
@ -3311,12 +3311,12 @@ fighter *make_fighter(battle * b, unit * u, side * s1, bool attack)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Jetzt mu<EFBFBD> noch geschaut werden, wo die Einheit die jeweils besten
|
/* Jetzt muss noch geschaut werden, wo die Einheit die jeweils besten
|
||||||
* Werte hat, das kommt aber erst irgendwo sp<EFBFBD>ter. Ich entscheide
|
* Werte hat, das kommt aber erst irgendwo spaeter. Ich entscheide
|
||||||
* w<EFBFBD>rend des Kampfes, welche ich nehme, je nach Gegner. Deswegen auch
|
* waehrend des Kampfes, welche ich nehme, je nach Gegner. Deswegen auch
|
||||||
* keine addierten boni. */
|
* keine addierten boni. */
|
||||||
|
|
||||||
/* Zuerst mal die Spezialbehandlung gewisser Sonderf<EFBFBD>lle. */
|
/* Zuerst mal die Spezialbehandlung gewisser Sonderfaelle. */
|
||||||
fig->magic = effskill(u, SK_MAGIC, NULL);
|
fig->magic = effskill(u, SK_MAGIC, NULL);
|
||||||
|
|
||||||
if (fig->horses) {
|
if (fig->horses) {
|
||||||
|
@ -3410,7 +3410,7 @@ battle *make_battle(region * r)
|
||||||
|
|
||||||
b->region = r;
|
b->region = r;
|
||||||
b->plane = getplane(r);
|
b->plane = getplane(r);
|
||||||
/* Finde alle Parteien, die den Kampf beobachten k<EFBFBD>nnen: */
|
/* Finde alle Parteien, die den Kampf beobachten koennen: */
|
||||||
for (u = r->units; u; u = u->next) {
|
for (u = r->units; u; u = u->next) {
|
||||||
if (u->number > 0) {
|
if (u->number > 0) {
|
||||||
if (!fval(u->faction, FFL_MARK)) {
|
if (!fval(u->faction, FFL_MARK)) {
|
||||||
|
@ -3593,18 +3593,18 @@ static void join_allies(battle * b)
|
||||||
|
|
||||||
for (s = b->sides; s != s_end; ++s) {
|
for (s = b->sides; s != s_end; ++s) {
|
||||||
side *se;
|
side *se;
|
||||||
/* Wenn alle attackierten noch FFL_NOAID haben, dann k<EFBFBD>mpfe nicht mit. */
|
/* Wenn alle attackierten noch FFL_NOAID haben, dann kaempfe nicht mit. */
|
||||||
if (fval(s->faction, FFL_NOAID))
|
if (fval(s->faction, FFL_NOAID))
|
||||||
continue;
|
continue;
|
||||||
if (s->faction != f) {
|
if (s->faction != f) {
|
||||||
/* Wenn wir attackiert haben, kommt niemand mehr hinzu: */
|
/* Wenn wir attackiert haben, kommt niemand mehr hinzu: */
|
||||||
if (s->bf->attacker)
|
if (s->bf->attacker)
|
||||||
continue;
|
continue;
|
||||||
/* alliiert m<EFBFBD>ssen wir schon sein, sonst ist's eh egal : */
|
/* alliiert muessen wir schon sein, sonst ist's eh egal : */
|
||||||
if (!alliedunit(u, s->faction, HELP_FIGHT))
|
if (!alliedunit(u, s->faction, HELP_FIGHT))
|
||||||
continue;
|
continue;
|
||||||
/* wenn die partei verborgen ist, oder gar eine andere
|
/* wenn die partei verborgen ist, oder gar eine andere
|
||||||
* vorgespiegelt wird, und er sich uns gegen<EFBFBD>ber nicht zu
|
* vorgespiegelt wird, und er sich uns gegenueber nicht zu
|
||||||
* erkennen gibt, helfen wir ihm nicht */
|
* erkennen gibt, helfen wir ihm nicht */
|
||||||
if (s->stealthfaction) {
|
if (s->stealthfaction) {
|
||||||
if (!alliedside(s, u->faction, HELP_FSTEALTH)) {
|
if (!alliedside(s, u->faction, HELP_FSTEALTH)) {
|
||||||
|
@ -3612,7 +3612,7 @@ static void join_allies(battle * b)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* einen alliierten angreifen d<EFBFBD>rfen sie nicht, es sei denn, der
|
/* einen alliierten angreifen duerfen sie nicht, es sei denn, der
|
||||||
* ist mit einem alliierten verfeindet, der nicht attackiert
|
* ist mit einem alliierten verfeindet, der nicht attackiert
|
||||||
* hat: */
|
* hat: */
|
||||||
for (se = b->sides; se != s_end; ++se) {
|
for (se = b->sides; se != s_end; ++se) {
|
||||||
|
@ -3626,7 +3626,7 @@ static void join_allies(battle * b)
|
||||||
}
|
}
|
||||||
if (se == s_end)
|
if (se == s_end)
|
||||||
continue;
|
continue;
|
||||||
/* keine Einw<EFBFBD>nde, also soll er mitmachen: */
|
/* keine Einwaende, also soll er mitmachen: */
|
||||||
if (c == NULL) {
|
if (c == NULL) {
|
||||||
if (!join_battle(b, u, false, &c)) {
|
if (!join_battle(b, u, false, &c)) {
|
||||||
continue;
|
continue;
|
||||||
|
@ -3750,7 +3750,7 @@ static bool start_battle(region * r, battle ** bp)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ist ein Fl<EFBFBD>chtling aus einem andern Kampf */
|
/* ist ein Fluechtling aus einem andern Kampf */
|
||||||
if (fval(u, UFL_LONGACTION))
|
if (fval(u, UFL_LONGACTION))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -3771,7 +3771,7 @@ static bool start_battle(region * r, battle ** bp)
|
||||||
cmistake(u, ord, 234, MSG_BATTLE);
|
cmistake(u, ord, 234, MSG_BATTLE);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* Fehler: "Das Schiff mu<EFBFBD> erst verlassen werden" */
|
/* Fehler: "Das Schiff muss erst verlassen werden" */
|
||||||
cmistake(u, ord, 19, MSG_BATTLE);
|
cmistake(u, ord, 19, MSG_BATTLE);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
|
@ -3845,8 +3845,8 @@ static bool start_battle(region * r, battle ** bp)
|
||||||
freset(u2->faction, FFL_NOAID);
|
freset(u2->faction, FFL_NOAID);
|
||||||
|
|
||||||
if (c1 && c2 && c2->run.number < c2->unit->number) {
|
if (c1 && c2 && c2->run.number < c2->unit->number) {
|
||||||
/* Merken, wer Angreifer ist, f<EFBFBD>r die R<>ckzahlung der
|
/* Merken, wer Angreifer ist, fuer die Rueckzahlung der
|
||||||
* Pr<EFBFBD>combataura bei kurzem Kampf. */
|
* Praecombataura bei kurzem Kampf. */
|
||||||
c1->side->bf->attacker = true;
|
c1->side->bf->attacker = true;
|
||||||
|
|
||||||
set_enemy(c1->side, c2->side, true);
|
set_enemy(c1->side, c2->side, true);
|
||||||
|
@ -3875,7 +3875,7 @@ static void battle_attacks(battle * b)
|
||||||
&& get_tactics(s, NULL) == b->max_tactics)) {
|
&& get_tactics(s, NULL) == b->max_tactics)) {
|
||||||
for (fig = s->fighters; fig; fig = fig->next) {
|
for (fig = s->fighters; fig; fig = fig->next) {
|
||||||
|
|
||||||
/* ist in dieser Einheit noch jemand handlungsf<EFBFBD>hig? */
|
/* ist in dieser Einheit noch jemand handlungsfaehig? */
|
||||||
if (fig->fighting <= 0)
|
if (fig->fighting <= 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -3918,7 +3918,7 @@ static void battle_flee(battle * b)
|
||||||
for (fig = s->fighters; fig; fig = fig->next) {
|
for (fig = s->fighters; fig; fig = fig->next) {
|
||||||
unit *u = fig->unit;
|
unit *u = fig->unit;
|
||||||
troop dt;
|
troop dt;
|
||||||
/* Flucht nicht bei mehr als 600 HP. Damit Wyrme t<EFBFBD>tbar bleiben. */
|
/* Flucht nicht bei mehr als 600 HP. Damit Wyrme toetbar bleiben. */
|
||||||
int runhp = (int)(0.9 + unit_max_hp(u) * hpflee(u->status));
|
int runhp = (int)(0.9 + unit_max_hp(u) * hpflee(u->status));
|
||||||
if (runhp > 600) runhp = 600;
|
if (runhp > 600) runhp = 600;
|
||||||
|
|
||||||
|
@ -4023,7 +4023,7 @@ static void do_battle(region * r) {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Bevor wir die alliierten hineinziehen, sollten wir schauen, *
|
/* Bevor wir die alliierten hineinziehen, sollten wir schauen, *
|
||||||
* Ob jemand fliehen kann. Dann er<EFBFBD>brigt sich das ganze ja
|
* Ob jemand fliehen kann. Dann eruebrigt sich das ganze ja
|
||||||
* vielleicht schon. */
|
* vielleicht schon. */
|
||||||
report_battle_start(b);
|
report_battle_start(b);
|
||||||
if (!fighting) {
|
if (!fighting) {
|
||||||
|
@ -4069,8 +4069,8 @@ static void do_battle(region * r) {
|
||||||
if (rule_force_leave(FORCE_LEAVE_POSTCOMBAT)) {
|
if (rule_force_leave(FORCE_LEAVE_POSTCOMBAT)) {
|
||||||
force_leave(b->region, b);
|
force_leave(b->region, b);
|
||||||
}
|
}
|
||||||
/* Hier ist das Gefecht beendet, und wir k<EFBFBD>nnen die
|
/* Hier ist das Gefecht beendet, und wir koennen die
|
||||||
* Hilfsstrukturen * wieder l<EFBFBD>schen: */
|
* Hilfsstrukturen * wieder loeschen: */
|
||||||
|
|
||||||
free_battle(b);
|
free_battle(b);
|
||||||
}
|
}
|
||||||
|
|
122
src/economy.c
122
src/economy.c
|
@ -479,7 +479,7 @@ message *can_recruit(unit *u, const race *rc, order *ord, int now)
|
||||||
}
|
}
|
||||||
if (has_skill(u, SK_MAGIC)) {
|
if (has_skill(u, SK_MAGIC)) {
|
||||||
/* error158;de;{unit} in {region}: '{command}' - Magier arbeiten
|
/* error158;de;{unit} in {region}: '{command}' - Magier arbeiten
|
||||||
* grunds<EFBFBD>tzlich nur alleine! */
|
* grundsaetzlich nur alleine! */
|
||||||
return msg_error(u, ord, 158);
|
return msg_error(u, ord, 158);
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -971,7 +971,7 @@ static void allocate_resource(unit * u, const resource_type * rtype, int want)
|
||||||
variant save_mod;
|
variant save_mod;
|
||||||
skill_t sk;
|
skill_t sk;
|
||||||
|
|
||||||
/* momentan kann man keine ressourcen abbauen, wenn man daf<EFBFBD>r
|
/* momentan kann man keine ressourcen abbauen, wenn man dafuer
|
||||||
* Materialverbrauch hat: */
|
* Materialverbrauch hat: */
|
||||||
assert(itype != NULL && (itype->construction == NULL
|
assert(itype != NULL && (itype->construction == NULL
|
||||||
|| itype->construction->materials == NULL));
|
|| itype->construction->materials == NULL));
|
||||||
|
@ -997,8 +997,8 @@ static void allocate_resource(unit * u, const resource_type * rtype, int want)
|
||||||
save_mod.sa[1] = 1;
|
save_mod.sa[1] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Bergw<EFBFBD>chter k<>nnen Abbau von Eisen/Laen durch Bewachen verhindern.
|
/* Bergwaechter koennen Abbau von Eisen/Laen durch Bewachen verhindern.
|
||||||
* Als magische Wesen 'sehen' Bergw<EFBFBD>chter alles und werden durch
|
* Als magische Wesen 'sehen' Bergwaechter alles und werden durch
|
||||||
* Belagerung nicht aufgehalten. (Ansonsten wie oben bei Elfen anpassen).
|
* Belagerung nicht aufgehalten. (Ansonsten wie oben bei Elfen anpassen).
|
||||||
*/
|
*/
|
||||||
if (itype->rtype && (itype->rtype == get_resourcetype(R_IRON) || itype->rtype == rt_find("laen"))) {
|
if (itype->rtype && (itype->rtype == get_resourcetype(R_IRON) || itype->rtype == rt_find("laen"))) {
|
||||||
|
@ -1473,15 +1473,15 @@ static void expandbuying(region * r, econ_request * buyorders)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Initialisation. multiplier ist der Multiplikator auf den
|
/* Initialisation. multiplier ist der Multiplikator auf den
|
||||||
* Verkaufspreis. F<EFBFBD>r max_products Produkte kauft man das Produkt zum
|
* Verkaufspreis. Fuer max_products Produkte kauft man das Produkt zum
|
||||||
* einfachen Verkaufspreis, danach erh<EFBFBD>ht sich der Multiplikator um 1.
|
* einfachen Verkaufspreis, danach erhoeht sich der Multiplikator um 1.
|
||||||
* counter ist ein Z<EFBFBD>hler, der die gekauften Produkte z<EFBFBD>hlt. money
|
* counter ist ein Zaehler, der die gekauften Produkte zaehlt. money
|
||||||
* wird f<EFBFBD>r die debug message gebraucht. */
|
* wird fuer die debug message gebraucht. */
|
||||||
|
|
||||||
max_products = rpeasants(r) / TRADE_FRACTION;
|
max_products = rpeasants(r) / TRADE_FRACTION;
|
||||||
|
|
||||||
/* Kauf - auch so programmiert, da<EFBFBD> er leicht erweiterbar auf mehrere
|
/* Kauf - auch so programmiert, dass er leicht erweiterbar auf mehrere
|
||||||
* G<EFBFBD>ter pro Monat ist. j sind die Befehle, i der Index des
|
* Gueter pro Monat ist. j sind die Befehle, i der Index des
|
||||||
* gehandelten Produktes. */
|
* gehandelten Produktes. */
|
||||||
if (max_products > 0) {
|
if (max_products > 0) {
|
||||||
unsigned int norders = expandorders(r, buyorders);
|
unsigned int norders = expandorders(r, buyorders);
|
||||||
|
@ -1500,10 +1500,10 @@ static void expandbuying(region * r, econ_request * buyorders)
|
||||||
if (get_pooled(g_requests[j]->unit, rsilver, GET_DEFAULT,
|
if (get_pooled(g_requests[j]->unit, rsilver, GET_DEFAULT,
|
||||||
price) >= price) {
|
price) >= price) {
|
||||||
item *items;
|
item *items;
|
||||||
/* litems z<EFBFBD>hlt die G<>ter, die verkauft wurden, u->n das Geld, das
|
/* litems zaehlt die Gueter, die verkauft wurden, u->n das Geld, das
|
||||||
* verdient wurde. Dies mu<EFBFBD> gemacht werden, weil der Preis st<EFBFBD>ndig sinkt,
|
* verdient wurde. Dies muss gemacht werden, weil der Preis staendig sinkt,
|
||||||
* man sich also das verdiente Geld und die verkauften Produkte separat
|
* man sich also das verdiente Geld und die verkauften Produkte separat
|
||||||
* merken mu<EFBFBD>. */
|
* merken muss. */
|
||||||
attrib *a;
|
attrib *a;
|
||||||
|
|
||||||
u = g_requests[j]->unit;
|
u = g_requests[j]->unit;
|
||||||
|
@ -1524,7 +1524,7 @@ static void expandbuying(region * r, econ_request * buyorders)
|
||||||
rsetmoney(r, rmoney(r) + price);
|
rsetmoney(r, rmoney(r) + price);
|
||||||
|
|
||||||
/* Falls mehr als max_products Bauern ein Produkt verkauft haben, steigt
|
/* Falls mehr als max_products Bauern ein Produkt verkauft haben, steigt
|
||||||
* der Preis Multiplikator f<EFBFBD>r das Produkt um den Faktor 1. Der Z<EFBFBD>hler
|
* der Preis Multiplikator fuer das Produkt um den Faktor 1. Der Zaehler
|
||||||
* wird wieder auf 0 gesetzt. */
|
* wird wieder auf 0 gesetzt. */
|
||||||
if (++trade->number == max_products) {
|
if (++trade->number == max_products) {
|
||||||
trade->number = 0;
|
trade->number = 0;
|
||||||
|
@ -1599,7 +1599,7 @@ static void buy(unit * u, econ_request ** buyorders, struct order *ord)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/* Im Augenblick kann man nur 1 Produkt kaufen. expandbuying ist aber
|
/* Im Augenblick kann man nur 1 Produkt kaufen. expandbuying ist aber
|
||||||
* schon daf<EFBFBD>r ausger<EFBFBD>stet, mehrere Produkte zu kaufen. */
|
* schon dafuer ausgeruestet, mehrere Produkte zu kaufen. */
|
||||||
|
|
||||||
kwd = init_order_depr(ord);
|
kwd = init_order_depr(ord);
|
||||||
assert(kwd == K_BUY);
|
assert(kwd == K_BUY);
|
||||||
|
@ -1632,11 +1632,11 @@ static void buy(unit * u, econ_request ** buyorders, struct order *ord)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ein H<EFBFBD>ndler kann nur 10 G<>ter pro Talentpunkt handeln. */
|
/* Ein Haendler kann nur 10 Gueter pro Talentpunkt handeln. */
|
||||||
k = u->number * 10 * effskill(u, SK_TRADE, NULL);
|
k = u->number * 10 * effskill(u, SK_TRADE, NULL);
|
||||||
|
|
||||||
/* hat der H<EFBFBD>ndler bereits gehandelt, muss die Menge der bereits
|
/* hat der Haendler bereits gehandelt, muss die Menge der bereits
|
||||||
* verkauften/gekauften G<EFBFBD>ter abgezogen werden */
|
* verkauften/gekauften Gueter abgezogen werden */
|
||||||
a = a_find(u->attribs, &at_trades);
|
a = a_find(u->attribs, &at_trades);
|
||||||
if (!a) {
|
if (!a) {
|
||||||
a = a_add(&u->attribs, a_new(&at_trades));
|
a = a_add(&u->attribs, a_new(&at_trades));
|
||||||
|
@ -1653,7 +1653,7 @@ static void buy(unit * u, econ_request ** buyorders, struct order *ord)
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(n >= 0);
|
assert(n >= 0);
|
||||||
/* die Menge der verkauften G<EFBFBD>ter merken */
|
/* die Menge der verkauften Gueter merken */
|
||||||
a->data.i += n;
|
a->data.i += n;
|
||||||
|
|
||||||
s = gettoken(token, sizeof(token));
|
s = gettoken(token, sizeof(token));
|
||||||
|
@ -1687,7 +1687,7 @@ void add_income(unit * u, income_t type, int want, int qty)
|
||||||
"unit region mode wanted amount", u, u->region, (int)type, want, qty));
|
"unit region mode wanted amount", u, u->region, (int)type, want, qty));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Steuers<EFBFBD>tze in % bei Burggr<67><72>e */
|
/* Steuersaetze in % bei Burggroesse */
|
||||||
static int tax_per_size[7] = { 0, 6, 12, 18, 24, 30, 36 };
|
static int tax_per_size[7] = { 0, 6, 12, 18, 24, 30, 36 };
|
||||||
|
|
||||||
static void expandselling(region * r, econ_request * sellorders, int limit)
|
static void expandselling(region * r, econ_request * sellorders, int limit)
|
||||||
|
@ -1723,11 +1723,11 @@ static void expandselling(region * r, econ_request * sellorders, int limit)
|
||||||
}
|
}
|
||||||
memset(counter, 0, sizeof(int) * ncounter);
|
memset(counter, 0, sizeof(int) * ncounter);
|
||||||
|
|
||||||
if (!sellorders) { /* NEIN, denn Insekten k<EFBFBD>nnen in || !r->buildings) */
|
if (!sellorders) { /* NEIN, denn Insekten koennen in || !r->buildings) */
|
||||||
return; /* S<EFBFBD>mpfen und W<>sten auch so handeln */
|
return; /* Suempfen und Wuesten auch so handeln */
|
||||||
}
|
}
|
||||||
/* Stelle Eigent<EFBFBD>mer der gr<67><72>ten Burg fest. Bekommt Steuern aus jedem
|
/* Stelle Eigentuemer der groessten Burg fest. Bekommt Steuern aus jedem
|
||||||
* Verkauf. Wenn zwei Burgen gleicher Gr<EFBFBD><EFBFBD>e bekommt gar keiner etwas. */
|
* Verkauf. Wenn zwei Burgen gleicher Groesse bekommt gar keiner etwas. */
|
||||||
for (b = rbuildings(r); b; b = b->next) {
|
for (b = rbuildings(r); b; b = b->next) {
|
||||||
if (b->size > maxsize && building_owner(b) != NULL
|
if (b->size > maxsize && building_owner(b) != NULL
|
||||||
&& b->type == castle_bt) {
|
&& b->type == castle_bt) {
|
||||||
|
@ -1750,13 +1750,13 @@ static void expandselling(region * r, econ_request * sellorders, int limit)
|
||||||
maxowner = (unit *)NULL;
|
maxowner = (unit *)NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Die Region muss genug Geld haben, um die Produkte kaufen zu k<EFBFBD>nnen. */
|
/* Die Region muss genug Geld haben, um die Produkte kaufen zu koennen. */
|
||||||
|
|
||||||
money = rmoney(r);
|
money = rmoney(r);
|
||||||
|
|
||||||
/* max_products sind 1/100 der Bev<EFBFBD>lkerung, falls soviele Produkte
|
/* max_products sind 1/100 der Bevoelkerung, falls soviele Produkte
|
||||||
* verkauft werden - counter[] - sinkt die Nachfrage um 1 Punkt.
|
* verkauft werden - counter[] - sinkt die Nachfrage um 1 Punkt.
|
||||||
* multiplier speichert r->demand f<EFBFBD>r die debug message ab. */
|
* multiplier speichert r->demand fuer die debug message ab. */
|
||||||
|
|
||||||
max_products = rpeasants(r) / TRADE_FRACTION;
|
max_products = rpeasants(r) / TRADE_FRACTION;
|
||||||
if (max_products <= 0)
|
if (max_products <= 0)
|
||||||
|
@ -1824,11 +1824,11 @@ static void expandselling(region * r, econ_request * sellorders, int limit)
|
||||||
change_money(u, price);
|
change_money(u, price);
|
||||||
fset(u, UFL_LONGACTION | UFL_NOTMOVING);
|
fset(u, UFL_LONGACTION | UFL_NOTMOVING);
|
||||||
|
|
||||||
/* r->money -= price; --- dies wird eben nicht ausgef<EFBFBD>hrt, denn die
|
/* r->money -= price; --- dies wird eben nicht ausgefuehrt, denn die
|
||||||
* Produkte k<EFBFBD>nnen auch als Steuern eingetrieben werden. In der Region
|
* Produkte koennen auch als Steuern eingetrieben werden. In der Region
|
||||||
* wurden Silberst<EFBFBD>cke gegen Luxusg<EFBFBD>ter des selben Wertes eingetauscht!
|
* wurden Silberstuecke gegen Luxusgueter des selben Wertes eingetauscht!
|
||||||
* Falls mehr als max_products Kunden ein Produkt gekauft haben, sinkt
|
* Falls mehr als max_products Kunden ein Produkt gekauft haben, sinkt
|
||||||
* die Nachfrage f<EFBFBD>r das Produkt um 1. Der Z<EFBFBD>hler wird wieder auf 0
|
* die Nachfrage fuer das Produkt um 1. Der Zaehler wird wieder auf 0
|
||||||
* gesetzt. */
|
* gesetzt. */
|
||||||
|
|
||||||
if (++counter[i] > max_products) {
|
if (++counter[i] > max_products) {
|
||||||
|
@ -1846,7 +1846,7 @@ static void expandselling(region * r, econ_request * sellorders, int limit)
|
||||||
}
|
}
|
||||||
free(g_requests);
|
free(g_requests);
|
||||||
|
|
||||||
/* Steuern. Hier werden die Steuern dem Besitzer der gr<EFBFBD><EFBFBD>ten Burg gegeben. */
|
/* Steuern. Hier werden die Steuern dem Besitzer der groessten Burg gegeben. */
|
||||||
if (maxowner) {
|
if (maxowner) {
|
||||||
if (taxcollected > 0) {
|
if (taxcollected > 0) {
|
||||||
change_money(maxowner, (int)taxcollected);
|
change_money(maxowner, (int)taxcollected);
|
||||||
|
@ -1903,7 +1903,7 @@ static bool sell(unit * u, econ_request ** sellorders, struct order *ord)
|
||||||
cmistake(u, ord, 69, MSG_INCOME);
|
cmistake(u, ord, 69, MSG_INCOME);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
/* sellorders sind KEIN array, weil f<EFBFBD>r alle items DIE SELBE resource
|
/* sellorders sind KEIN array, weil fuer alle items DIE SELBE resource
|
||||||
* (das geld der region) aufgebraucht wird. */
|
* (das geld der region) aufgebraucht wird. */
|
||||||
|
|
||||||
kwd = init_order_depr(ord);
|
kwd = init_order_depr(ord);
|
||||||
|
@ -1928,7 +1928,7 @@ static bool sell(unit * u, econ_request ** sellorders, struct order *ord)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* In der Region mu<EFBFBD> es eine Burg geben. */
|
/* In der Region muss es eine Burg geben. */
|
||||||
|
|
||||||
if (u_race(u) == get_race(RC_INSECT)) {
|
if (u_race(u) == get_race(RC_INSECT)) {
|
||||||
if (r->terrain != newterrain(T_SWAMP) && r->terrain != newterrain(T_DESERT)
|
if (r->terrain != newterrain(T_SWAMP) && r->terrain != newterrain(T_DESERT)
|
||||||
|
@ -1938,7 +1938,7 @@ static bool sell(unit * u, econ_request ** sellorders, struct order *ord)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* ...oder in der Region mu<EFBFBD> es eine Burg geben. */
|
/* ...oder in der Region muss es eine Burg geben. */
|
||||||
building *b = 0;
|
building *b = 0;
|
||||||
if (r->buildings) {
|
if (r->buildings) {
|
||||||
for (b = r->buildings; b; b = b->next) {
|
for (b = r->buildings; b; b = b->next) {
|
||||||
|
@ -1951,7 +1951,7 @@ static bool sell(unit * u, econ_request ** sellorders, struct order *ord)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ein H<EFBFBD>ndler kann nur 10 G<>ter pro Talentpunkt verkaufen. */
|
/* Ein Haendler kann nur 10 Gueter pro Talentpunkt verkaufen. */
|
||||||
|
|
||||||
i = u->number * 10 * effskill(u, SK_TRADE, NULL);
|
i = u->number * 10 * effskill(u, SK_TRADE, NULL);
|
||||||
if (n > i) n = i;
|
if (n > i) n = i;
|
||||||
|
@ -1978,7 +1978,7 @@ static bool sell(unit * u, econ_request ** sellorders, struct order *ord)
|
||||||
}
|
}
|
||||||
available = get_pooled(u, itype->rtype, GET_DEFAULT, INT_MAX);
|
available = get_pooled(u, itype->rtype, GET_DEFAULT, INT_MAX);
|
||||||
|
|
||||||
/* Wenn andere Einheiten das selbe verkaufen, mu<EFBFBD> ihr Zeug abgezogen
|
/* Wenn andere Einheiten das selbe verkaufen, muss ihr Zeug abgezogen
|
||||||
* werden damit es nicht zweimal verkauft wird: */
|
* werden damit es nicht zweimal verkauft wird: */
|
||||||
for (o = *sellorders; o; o = o->next) {
|
for (o = *sellorders; o; o = o->next) {
|
||||||
if (o->type.trade.ltype == ltype && o->unit->faction == u->faction) {
|
if (o->type.trade.ltype == ltype && o->unit->faction == u->faction) {
|
||||||
|
@ -1996,16 +1996,16 @@ static bool sell(unit * u, econ_request ** sellorders, struct order *ord)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
/* Hier wird production->type verwendet, weil die obere limit durch
|
/* Hier wird production->type verwendet, weil die obere limit durch
|
||||||
* das silber gegeben wird (region->money), welches f<EFBFBD>r alle
|
* das silber gegeben wird (region->money), welches fuer alle
|
||||||
* (!) produkte als summe gilt, als nicht wie bei der
|
* (!) produkte als summe gilt, als nicht wie bei der
|
||||||
* produktion, wo f<EFBFBD>r jedes produkt einzeln eine obere limite
|
* produktion, wo fuer jedes produkt einzeln eine obere limite
|
||||||
* existiert, so dass man arrays von orders machen kann. */
|
* existiert, so dass man arrays von orders machen kann. */
|
||||||
|
|
||||||
/* Ein H<EFBFBD>ndler kann nur 10 G<>ter pro Talentpunkt handeln. */
|
/* Ein Haendler kann nur 10 Gueter pro Talentpunkt handeln. */
|
||||||
k = u->number * 10 * effskill(u, SK_TRADE, NULL);
|
k = u->number * 10 * effskill(u, SK_TRADE, NULL);
|
||||||
|
|
||||||
/* hat der H<EFBFBD>ndler bereits gehandelt, muss die Menge der bereits
|
/* hat der Haendler bereits gehandelt, muss die Menge der bereits
|
||||||
* verkauften/gekauften G<EFBFBD>ter abgezogen werden */
|
* verkauften/gekauften Gueter abgezogen werden */
|
||||||
a = a_find(u->attribs, &at_trades);
|
a = a_find(u->attribs, &at_trades);
|
||||||
if (!a) {
|
if (!a) {
|
||||||
a = a_add(&u->attribs, a_new(&at_trades));
|
a = a_add(&u->attribs, a_new(&at_trades));
|
||||||
|
@ -2016,7 +2016,7 @@ static bool sell(unit * u, econ_request ** sellorders, struct order *ord)
|
||||||
|
|
||||||
if (n > k) n = k;
|
if (n > k) n = k;
|
||||||
assert(n >= 0);
|
assert(n >= 0);
|
||||||
/* die Menge der verkauften G<EFBFBD>ter merken */
|
/* die Menge der verkauften Gueter merken */
|
||||||
a->data.i += n;
|
a->data.i += n;
|
||||||
o = (econ_request *)calloc(1, sizeof(econ_request));
|
o = (econ_request *)calloc(1, sizeof(econ_request));
|
||||||
if (!o) abort();
|
if (!o) abort();
|
||||||
|
@ -2047,7 +2047,7 @@ static void plant(unit * u, int raw)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Skill pr<EFBFBD>fen */
|
/* Skill pruefen */
|
||||||
skill = effskill(u, SK_HERBALISM, NULL);
|
skill = effskill(u, SK_HERBALISM, NULL);
|
||||||
if (skill < 6) {
|
if (skill < 6) {
|
||||||
ADDMSG(&u->faction->msgs,
|
ADDMSG(&u->faction->msgs,
|
||||||
|
@ -2055,14 +2055,14 @@ static void plant(unit * u, int raw)
|
||||||
"skill minskill product", SK_HERBALISM, 6, itype->rtype, 1));
|
"skill minskill product", SK_HERBALISM, 6, itype->rtype, 1));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/* Wasser des Lebens pr<EFBFBD>fen */
|
/* Wasser des Lebens pruefen */
|
||||||
if (get_pooled(u, rt_water, GET_DEFAULT, 1) == 0) {
|
if (get_pooled(u, rt_water, GET_DEFAULT, 1) == 0) {
|
||||||
ADDMSG(&u->faction->msgs,
|
ADDMSG(&u->faction->msgs,
|
||||||
msg_feedback(u, u->thisorder, "resource_missing", "missing", rt_water));
|
msg_feedback(u, u->thisorder, "resource_missing", "missing", rt_water));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
n = get_pooled(u, itype->rtype, GET_DEFAULT, skill * u->number);
|
n = get_pooled(u, itype->rtype, GET_DEFAULT, skill * u->number);
|
||||||
/* Kr<EFBFBD>uter pr<70>fen */
|
/* Kraeuter pruefen */
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
ADDMSG(&u->faction->msgs,
|
ADDMSG(&u->faction->msgs,
|
||||||
msg_feedback(u, u->thisorder, "resource_missing", "missing",
|
msg_feedback(u, u->thisorder, "resource_missing", "missing",
|
||||||
|
@ -2073,7 +2073,7 @@ static void plant(unit * u, int raw)
|
||||||
i = skill * u->number;
|
i = skill * u->number;
|
||||||
if (i > raw) i = raw;
|
if (i > raw) i = raw;
|
||||||
if (n > i) n = i;
|
if (n > i) n = i;
|
||||||
/* F<EFBFBD>r jedes Kraut Talent*10% Erfolgschance. */
|
/* Fuer jedes Kraut Talent*10% Erfolgschance. */
|
||||||
for (i = n; i > 0; i--) {
|
for (i = n; i > 0; i--) {
|
||||||
if (rng_int() % 10 < skill)
|
if (rng_int() % 10 < skill)
|
||||||
planted++;
|
planted++;
|
||||||
|
@ -2098,10 +2098,10 @@ static void planttrees(unit * u, int raw)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mallornb<EFBFBD>ume kann man nur in Mallornregionen z<>chten */
|
/* Mallornbaeume kann man nur in Mallornregionen zuechten */
|
||||||
rtype = get_resourcetype(fval(r, RF_MALLORN) ? R_MALLORN_SEED : R_SEED);
|
rtype = get_resourcetype(fval(r, RF_MALLORN) ? R_MALLORN_SEED : R_SEED);
|
||||||
|
|
||||||
/* Skill pr<EFBFBD>fen */
|
/* Skill pruefen */
|
||||||
skill = effskill(u, SK_HERBALISM, NULL);
|
skill = effskill(u, SK_HERBALISM, NULL);
|
||||||
if (skill < 6) {
|
if (skill < 6) {
|
||||||
ADDMSG(&u->faction->msgs,
|
ADDMSG(&u->faction->msgs,
|
||||||
|
@ -2126,7 +2126,7 @@ static void planttrees(unit * u, int raw)
|
||||||
}
|
}
|
||||||
if (n > raw) n = raw;
|
if (n > raw) n = raw;
|
||||||
|
|
||||||
/* F<EFBFBD>r jeden Samen Talent*10% Erfolgschance. */
|
/* Fuer jeden Samen Talent*10% Erfolgschance. */
|
||||||
for (i = n; i > 0; i--) {
|
for (i = n; i > 0; i--) {
|
||||||
if (rng_int() % 10 < skill)
|
if (rng_int() % 10 < skill)
|
||||||
planted++;
|
planted++;
|
||||||
|
@ -2141,7 +2141,7 @@ static void planttrees(unit * u, int raw)
|
||||||
"unit region amount herb", u, r, planted, rtype));
|
"unit region amount herb", u, r, planted, rtype));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* z<EFBFBD>chte b<>ume */
|
/* zuechte baeume */
|
||||||
static void breedtrees(unit * u, int raw)
|
static void breedtrees(unit * u, int raw)
|
||||||
{
|
{
|
||||||
int n, i, skill, planted = 0;
|
int n, i, skill, planted = 0;
|
||||||
|
@ -2153,7 +2153,7 @@ static void breedtrees(unit * u, int raw)
|
||||||
get_gamedate(turn, &date);
|
get_gamedate(turn, &date);
|
||||||
current_season = date.season;
|
current_season = date.season;
|
||||||
|
|
||||||
/* B<EFBFBD>ume z<>chten geht nur im Fr<46>hling */
|
/* Baeume zuechten geht nur im Fruehling */
|
||||||
if (current_season != SEASON_SPRING) {
|
if (current_season != SEASON_SPRING) {
|
||||||
planttrees(u, raw);
|
planttrees(u, raw);
|
||||||
return;
|
return;
|
||||||
|
@ -2163,10 +2163,10 @@ static void breedtrees(unit * u, int raw)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mallornb<EFBFBD>ume kann man nur in Mallornregionen z<>chten */
|
/* Mallornbaeume kann man nur in Mallornregionen zuechten */
|
||||||
rtype = get_resourcetype(fval(r, RF_MALLORN) ? R_MALLORN_SEED : R_SEED);
|
rtype = get_resourcetype(fval(r, RF_MALLORN) ? R_MALLORN_SEED : R_SEED);
|
||||||
|
|
||||||
/* Skill pr<EFBFBD>fen */
|
/* Skill pruefen */
|
||||||
skill = effskill(u, SK_HERBALISM, NULL);
|
skill = effskill(u, SK_HERBALISM, NULL);
|
||||||
if (skill < 12) {
|
if (skill < 12) {
|
||||||
planttrees(u, raw);
|
planttrees(u, raw);
|
||||||
|
@ -2177,7 +2177,7 @@ static void breedtrees(unit * u, int raw)
|
||||||
i = skill * u->number;
|
i = skill * u->number;
|
||||||
if (raw > i) raw = i;
|
if (raw > i) raw = i;
|
||||||
n = get_pooled(u, rtype, GET_DEFAULT, raw);
|
n = get_pooled(u, rtype, GET_DEFAULT, raw);
|
||||||
/* Samen pr<EFBFBD>fen */
|
/* Samen pruefen */
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
ADDMSG(&u->faction->msgs,
|
ADDMSG(&u->faction->msgs,
|
||||||
msg_feedback(u, u->thisorder, "resource_missing", "missing", rtype));
|
msg_feedback(u, u->thisorder, "resource_missing", "missing", rtype));
|
||||||
|
@ -2185,7 +2185,7 @@ static void breedtrees(unit * u, int raw)
|
||||||
}
|
}
|
||||||
if (n > raw) n = raw;
|
if (n > raw) n = raw;
|
||||||
|
|
||||||
/* F<EFBFBD>r jeden Samen Talent*5% Erfolgschance. */
|
/* Fuer jeden Samen Talent*5% Erfolgschance. */
|
||||||
for (i = n; i > 0; i--) {
|
for (i = n; i > 0; i--) {
|
||||||
if (rng_int() % 100 < skill * 5)
|
if (rng_int() % 100 < skill * 5)
|
||||||
planted++;
|
planted++;
|
||||||
|
@ -2200,7 +2200,7 @@ static void breedtrees(unit * u, int raw)
|
||||||
"unit region amount herb", u, r, planted, rtype));
|
"unit region amount herb", u, r, planted, rtype));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* z<EFBFBD>chte pferde */
|
/* zuechte pferde */
|
||||||
static void breedhorses(unit * u)
|
static void breedhorses(unit * u)
|
||||||
{
|
{
|
||||||
int n, c, breed = 0;
|
int n, c, breed = 0;
|
||||||
|
@ -2252,7 +2252,7 @@ static void breed_cmd(unit * u, struct order *ord)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* z<EFBFBD>chte [<anzahl>] <parameter> */
|
/* zuechte [<anzahl>] <parameter> */
|
||||||
(void)init_order_depr(ord);
|
(void)init_order_depr(ord);
|
||||||
s = gettoken(token, sizeof(token));
|
s = gettoken(token, sizeof(token));
|
||||||
|
|
||||||
|
@ -2367,7 +2367,7 @@ static void expandentertainment(region * r)
|
||||||
m -= u->n;
|
m -= u->n;
|
||||||
entertaining -= o->qty;
|
entertaining -= o->qty;
|
||||||
|
|
||||||
/* Nur soviel PRODUCEEXP wie auch tats<EFBFBD>chlich gemacht wurde */
|
/* Nur soviel PRODUCEEXP wie auch tatsaechlich gemacht wurde */
|
||||||
produceexp(u, SK_ENTERTAINMENT, (u->n < u->number) ? u->n : u->number);
|
produceexp(u, SK_ENTERTAINMENT, (u->n < u->number) ? u->n : u->number);
|
||||||
add_income(u, IC_ENTERTAIN, o->qty, u->n);
|
add_income(u, IC_ENTERTAIN, o->qty, u->n);
|
||||||
fset(u, UFL_LONGACTION | UFL_NOTMOVING);
|
fset(u, UFL_LONGACTION | UFL_NOTMOVING);
|
||||||
|
@ -2925,7 +2925,7 @@ void produce(struct region *r)
|
||||||
|
|
||||||
/* Entertainment (expandentertainment) und Besteuerung (expandtax) vor den
|
/* Entertainment (expandentertainment) und Besteuerung (expandtax) vor den
|
||||||
* Befehlen, die den Bauern mehr Geld geben, damit man aus den Zahlen der
|
* Befehlen, die den Bauern mehr Geld geben, damit man aus den Zahlen der
|
||||||
* letzten Runde berechnen kann, wieviel die Bauern f<EFBFBD>r Unterhaltung
|
* letzten Runde berechnen kann, wieviel die Bauern fuer Unterhaltung
|
||||||
* auszugeben bereit sind. */
|
* auszugeben bereit sind. */
|
||||||
if (entertaining)
|
if (entertaining)
|
||||||
expandentertainment(r);
|
expandentertainment(r);
|
||||||
|
@ -2943,7 +2943,7 @@ void produce(struct region *r)
|
||||||
}
|
}
|
||||||
/* An erster Stelle Kaufen (expandbuying), die Bauern so Geld bekommen, um
|
/* An erster Stelle Kaufen (expandbuying), die Bauern so Geld bekommen, um
|
||||||
* nachher zu beim Verkaufen (expandselling) den Spielern abkaufen zu
|
* nachher zu beim Verkaufen (expandselling) den Spielern abkaufen zu
|
||||||
* k<EFBFBD>nnen. */
|
* koennen. */
|
||||||
|
|
||||||
if (buyorders) {
|
if (buyorders) {
|
||||||
expandbuying(r, buyorders);
|
expandbuying(r, buyorders);
|
||||||
|
|
14
src/give.c
14
src/give.c
|
@ -402,7 +402,7 @@ message * give_men(int n, unit * u, unit * u2, struct order *ord)
|
||||||
if (has_skill(u2, SK_ALCHEMY) && !has_skill(u, SK_ALCHEMY))
|
if (has_skill(u2, SK_ALCHEMY) && !has_skill(u, SK_ALCHEMY))
|
||||||
k += n;
|
k += n;
|
||||||
|
|
||||||
/* Wenn Parteigrenzen überschritten werden */
|
/* Wenn Parteigrenzen ueberschritten werden */
|
||||||
if (u2->faction != u->faction)
|
if (u2->faction != u->faction)
|
||||||
k += n;
|
k += n;
|
||||||
|
|
||||||
|
@ -416,8 +416,8 @@ message * give_men(int n, unit * u, unit * u2, struct order *ord)
|
||||||
if (error == 0) {
|
if (error == 0) {
|
||||||
ship *sh = leftship(u);
|
ship *sh = leftship(u);
|
||||||
|
|
||||||
/* Einheiten von Schiffen können nicht NACH in von
|
/* Einheiten von Schiffen koennen nicht NACH in von
|
||||||
* Nicht-alliierten bewachten Regionen ausführen */
|
* Nicht-alliierten bewachten Regionen ausfuehren */
|
||||||
if (sh) {
|
if (sh) {
|
||||||
set_leftship(u2, sh);
|
set_leftship(u2, sh);
|
||||||
}
|
}
|
||||||
|
@ -608,7 +608,7 @@ void give_unit(unit * u, unit * u2, order * ord)
|
||||||
}
|
}
|
||||||
|
|
||||||
bool can_give_to(unit *u, unit *u2) {
|
bool can_give_to(unit *u, unit *u2) {
|
||||||
/* Damit Tarner nicht durch die Fehlermeldung enttarnt werden können */
|
/* Damit Tarner nicht durch die Fehlermeldung enttarnt werden koennen */
|
||||||
if (!u2) {
|
if (!u2) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -638,8 +638,8 @@ static void give_all_items(unit *u, unit *u2, order *ord) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* für alle items einmal prüfen, ob wir mehr als von diesem Typ
|
/* fuer alle items einmal pruefen, ob wir mehr als von diesem Typ
|
||||||
* reserviert ist besitzen und diesen Teil dann übergeben */
|
* reserviert ist besitzen und diesen Teil dann uebergeben */
|
||||||
if (u->items) {
|
if (u->items) {
|
||||||
item **itmp = &u->items;
|
item **itmp = &u->items;
|
||||||
while (*itmp) {
|
while (*itmp) {
|
||||||
|
@ -768,7 +768,7 @@ void give_cmd(unit * u, order * ord)
|
||||||
while (*itmp) {
|
while (*itmp) {
|
||||||
item *itm = *itmp;
|
item *itm = *itmp;
|
||||||
if (fval(itm->type, ITF_HERB) && itm->number > 0) {
|
if (fval(itm->type, ITF_HERB) && itm->number > 0) {
|
||||||
/* give_item ändert im fall,das man alles übergibt, die
|
/* give_item aendert im fall,das man alles uebergibt, die
|
||||||
* item-liste der unit, darum continue vor pointerumsetzten */
|
* item-liste der unit, darum continue vor pointerumsetzten */
|
||||||
if (give_item(itm->number, itm->type, u, u2, ord) == 0) {
|
if (give_item(itm->number, itm->type, u, u2, ord) == 0) {
|
||||||
given = true;
|
given = true;
|
||||||
|
|
|
@ -152,7 +152,7 @@ order * ord)
|
||||||
r = findregion(a->data.sa[0], a->data.sa[1]);
|
r = findregion(a->data.sa[0], a->data.sa[1]);
|
||||||
assert(r);
|
assert(r);
|
||||||
a_remove(&u->attribs, a);
|
a_remove(&u->attribs, a);
|
||||||
/* Ãbergebene Gegenstände zurückgeben */
|
/* Uebergebene Gegenstaende zurueckgeben */
|
||||||
|
|
||||||
a = a_find(u->attribs, &at_museumgivebackcookie);
|
a = a_find(u->attribs, &at_museumgivebackcookie);
|
||||||
if (a) {
|
if (a) {
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
* based on:
|
* based on:
|
||||||
*
|
*
|
||||||
* Atlantis v1.0 13 September 1993 Copyright 1993 by Russell Wallace
|
* Atlantis v1.0 13 September 1993 Copyright 1993 by Russell Wallace
|
||||||
* Atlantis v1.7 Copyright 1996 by Alex Schr<EFBFBD>der
|
* Atlantis v1.7 Copyright 1996 by Alex Schroeder
|
||||||
*
|
*
|
||||||
* This program may not be used, modified or distributed without
|
* This program may not be used, modified or distributed without
|
||||||
* prior permission by the authors of Eressea.
|
* prior permission by the authors of Eressea.
|
||||||
|
@ -74,7 +74,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
#define DRAGON_RANGE 20 /* max. Distanz zum n<EFBFBD>chsten Drachenziel */
|
#define DRAGON_RANGE 20 /* max. Distanz zum naechsten Drachenziel */
|
||||||
#define MOVE_PERCENT 25 /* chance fuer bewegung */
|
#define MOVE_PERCENT 25 /* chance fuer bewegung */
|
||||||
#define MAXILLUSION_TEXTS 3
|
#define MAXILLUSION_TEXTS 3
|
||||||
|
|
||||||
|
@ -371,11 +371,11 @@ static direction_t random_neighbour(region * r, unit * u)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Zuf<EFBFBD>llig eine ausw<73>hlen */
|
/* Zufaellig eine auswaehlen */
|
||||||
|
|
||||||
rr = rng_int() % c;
|
rr = rng_int() % c;
|
||||||
|
|
||||||
/* Durchz<EFBFBD>hlen */
|
/* Durchzaehlen */
|
||||||
|
|
||||||
c = 0;
|
c = 0;
|
||||||
for (i = 0; i != MAXDIRECTIONS; i++) {
|
for (i = 0; i != MAXDIRECTIONS; i++) {
|
||||||
|
@ -412,11 +412,11 @@ static direction_t treeman_neighbour(region * r)
|
||||||
if (c == 0) {
|
if (c == 0) {
|
||||||
return NODIRECTION;
|
return NODIRECTION;
|
||||||
}
|
}
|
||||||
/* Zuf<EFBFBD>llig eine ausw<73>hlen */
|
/* Zufaellig eine auswaehlen */
|
||||||
|
|
||||||
rr = rng_int() % c;
|
rr = rng_int() % c;
|
||||||
|
|
||||||
/* Durchz<EFBFBD>hlen */
|
/* Durchzaehlen */
|
||||||
|
|
||||||
c = -1;
|
c = -1;
|
||||||
for (i = 0; i != MAXDIRECTIONS; i++) {
|
for (i = 0; i != MAXDIRECTIONS; i++) {
|
||||||
|
@ -561,7 +561,7 @@ static order *monster_learn(unit * u)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Monster lernt ein zuf<EFBFBD>lliges Talent aus allen, in denen es schon
|
/* Monster lernt ein zufaelliges Talent aus allen, in denen es schon
|
||||||
* Lerntage hat. */
|
* Lerntage hat. */
|
||||||
for (sv = u->skills; sv != u->skills + u->skill_size; ++sv) {
|
for (sv = u->skills; sv != u->skills + u->skill_size; ++sv) {
|
||||||
if (sv->level > 0)
|
if (sv->level > 0)
|
||||||
|
@ -650,7 +650,7 @@ static order *plan_dragon(unit * u)
|
||||||
if (rc == rc_wyrm && !move) {
|
if (rc == rc_wyrm && !move) {
|
||||||
unit *u2;
|
unit *u2;
|
||||||
for (u2 = r->units; u2; u2 = u2->next) {
|
for (u2 = r->units; u2; u2 = u2->next) {
|
||||||
/* wyrme sind einzelg<6C>nger */
|
/* Wyrme sind Einzelgaenger */
|
||||||
if (u2 == u) {
|
if (u2 == u) {
|
||||||
/* we do not make room for newcomers, so we don't need to look at them */
|
/* we do not make room for newcomers, so we don't need to look at them */
|
||||||
break;
|
break;
|
||||||
|
@ -747,7 +747,7 @@ void plan_monsters(faction * f)
|
||||||
order *long_order = NULL;
|
order *long_order = NULL;
|
||||||
bool can_move = true;
|
bool can_move = true;
|
||||||
|
|
||||||
/* Ab hier nur noch Befehle f<EFBFBD>r NPC-Einheiten. */
|
/* Ab hier nur noch Befehle fuer NPC-Einheiten. */
|
||||||
if (u->faction!=f)
|
if (u->faction!=f)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -761,7 +761,7 @@ void plan_monsters(faction * f)
|
||||||
produceexp(u, SK_PERCEPTION, u->number);
|
produceexp(u, SK_PERCEPTION, u->number);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Befehle m<EFBFBD>ssen jede Runde neu gegeben werden: */
|
/* Befehle muessen jede Runde neu gegeben werden: */
|
||||||
free_orders(&u->orders);
|
free_orders(&u->orders);
|
||||||
|
|
||||||
/* All monsters guard the region: */
|
/* All monsters guard the region: */
|
||||||
|
@ -833,7 +833,7 @@ void plan_monsters(faction * f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (long_order == NULL && check_student(u, NULL, SK_WEAPONLESS)) {
|
if (long_order == NULL && check_student(u, NULL, SK_WEAPONLESS)) {
|
||||||
/* Einheiten, die Waffenlosen Kampf lernen k<EFBFBD>nnten, lernen es um
|
/* Einheiten, die Waffenlosen Kampf lernen koennten, lernen es um
|
||||||
* zu bewachen: */
|
* zu bewachen: */
|
||||||
if (rc->bonus[SK_WEAPONLESS] != -99) {
|
if (rc->bonus[SK_WEAPONLESS] != -99) {
|
||||||
if (effskill(u, SK_WEAPONLESS, NULL) < 1) {
|
if (effskill(u, SK_WEAPONLESS, NULL) < 1) {
|
||||||
|
@ -875,7 +875,7 @@ unit *spawn_seaserpent(region *r, faction *f) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Drachen und Seeschlangen k<EFBFBD>nnen entstehen
|
* Drachen und Seeschlangen koennen entstehen
|
||||||
*/
|
*/
|
||||||
void spawn_dragons(void)
|
void spawn_dragons(void)
|
||||||
{
|
{
|
||||||
|
@ -926,7 +926,7 @@ void spawn_dragons(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Untote k<EFBFBD>nnen entstehen */
|
/** Untote koennen entstehen */
|
||||||
void spawn_undead(void)
|
void spawn_undead(void)
|
||||||
{
|
{
|
||||||
region *r;
|
region *r;
|
||||||
|
@ -946,7 +946,7 @@ void spawn_undead(void)
|
||||||
message *msg;
|
message *msg;
|
||||||
unit *u;
|
unit *u;
|
||||||
/* es ist sinnfrei, wenn irgendwo im Wald 3er-Einheiten Untote entstehen.
|
/* es ist sinnfrei, wenn irgendwo im Wald 3er-Einheiten Untote entstehen.
|
||||||
* Lieber sammeln lassen, bis sie mindestens 5% der Bev<EFBFBD>lkerung sind, und
|
* Lieber sammeln lassen, bis sie mindestens 5% der Bevoelkerung sind, und
|
||||||
* dann erst auferstehen. */
|
* dann erst auferstehen. */
|
||||||
int undead = unburied / (rng_int() % 2 + 1);
|
int undead = unburied / (rng_int() % 2 + 1);
|
||||||
const race *rc = NULL;
|
const race *rc = NULL;
|
||||||
|
@ -1005,7 +1005,7 @@ void spawn_undead(void)
|
||||||
else {
|
else {
|
||||||
int i = deathcount(r);
|
int i = deathcount(r);
|
||||||
if (i) {
|
if (i) {
|
||||||
/* Gr<EFBFBD>ber verwittern, 3% der Untoten finden die ewige Ruhe */
|
/* Groeber verwittern, 3% der Untoten finden die ewige Ruhe */
|
||||||
deathcounts(r, (int)(-i * 0.03));
|
deathcounts(r, (int)(-i * 0.03));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -551,9 +551,9 @@ static void nr_curses(struct stream *out, int indent, const faction *viewer, obj
|
||||||
region *r;
|
region *r;
|
||||||
|
|
||||||
/* Die Sichtbarkeit eines Zaubers und die Zaubermeldung sind bei
|
/* Die Sichtbarkeit eines Zaubers und die Zaubermeldung sind bei
|
||||||
* Gebäuden und Schiffen je nach, ob man Besitzer ist, verschieden.
|
* Gebaeuden und Schiffen je nach, ob man Besitzer ist, verschieden.
|
||||||
* Bei Einheiten sieht man Wirkungen auf eigene Einheiten immer.
|
* Bei Einheiten sieht man Wirkungen auf eigene Einheiten immer.
|
||||||
* Spezialfälle (besonderes Talent, verursachender Magier usw. werde
|
* Spezialfaelle (besonderes Talent, verursachender Magier usw. werde
|
||||||
* bei jedem curse gesondert behandelt. */
|
* bei jedem curse gesondert behandelt. */
|
||||||
if (typ == TYP_SHIP) {
|
if (typ == TYP_SHIP) {
|
||||||
ship *sh = (ship *)obj;
|
ship *sh = (ship *)obj;
|
||||||
|
|
32
src/spells.c
32
src/spells.c
|
@ -449,7 +449,7 @@ report_effect(region * r, unit * mage, message * seen, message * unseen)
|
||||||
* Vertrauten sehen, und durch den Vertrauten zaubern, allerdings nur
|
* Vertrauten sehen, und durch den Vertrauten zaubern, allerdings nur
|
||||||
* mit seiner halben Stufe. Je nach Vertrautem erhaelt der Magier
|
* mit seiner halben Stufe. Je nach Vertrautem erhaelt der Magier
|
||||||
* evtl diverse Skillmodifikationen. Der Typ des Vertrauten ist
|
* evtl diverse Skillmodifikationen. Der Typ des Vertrauten ist
|
||||||
* zufaellig bestimmt, wird aber durch Magiegebiet und Rasse beeinflußt.
|
* zufaellig bestimmt, wird aber durch Magiegebiet und Rasse beeinflusst.
|
||||||
* "Tierische" Vertraute brauchen keinen Unterhalt.
|
* "Tierische" Vertraute brauchen keinen Unterhalt.
|
||||||
*
|
*
|
||||||
* Ein paar Moeglichkeiten:
|
* Ein paar Moeglichkeiten:
|
||||||
|
@ -1588,7 +1588,7 @@ static int sp_create_stonegolem(castorder * co)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------- */
|
/* ------------------------------------------------------------- */
|
||||||
/* Name: Gro<EFBFBD>e Duerre
|
/* Name: Grosse Duerre
|
||||||
* Stufe: 17
|
* Stufe: 17
|
||||||
* Kategorie: Region, negativ
|
* Kategorie: Region, negativ
|
||||||
* Gebiet: Gwyrrd
|
* Gebiet: Gwyrrd
|
||||||
|
@ -1896,7 +1896,7 @@ static int sp_treewalkexit(castorder * co)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Koordinaten setzen und Region loeschen fuer <EFBFBD>berpruefung auf
|
/* Koordinaten setzen und Region loeschen fuer Ueberpruefung auf
|
||||||
* Gueltigkeit */
|
* Gueltigkeit */
|
||||||
rt = pa->param[0]->data.r;
|
rt = pa->param[0]->data.r;
|
||||||
tax = rt->x;
|
tax = rt->x;
|
||||||
|
@ -2179,7 +2179,7 @@ static int sp_ironkeeper(castorder * co)
|
||||||
unit_setstatus(keeper, ST_AVOID); /* kaempft nicht */
|
unit_setstatus(keeper, ST_AVOID); /* kaempft nicht */
|
||||||
setguard(keeper, true);
|
setguard(keeper, true);
|
||||||
fset(keeper, UFL_ISNEW);
|
fset(keeper, UFL_ISNEW);
|
||||||
/* Parteitarnen, damit man nicht sofort wei<EFBFBD>, wer dahinter steckt */
|
/* Parteitarnen, damit man nicht sofort weiss, wer dahinter steckt */
|
||||||
if (rule_stealth_anon()) {
|
if (rule_stealth_anon()) {
|
||||||
fset(keeper, UFL_ANON_FACTION);
|
fset(keeper, UFL_ANON_FACTION);
|
||||||
}
|
}
|
||||||
|
@ -2557,7 +2557,7 @@ static void patzer_fumblecurse(const castorder * co)
|
||||||
*
|
*
|
||||||
* Wirkung:
|
* Wirkung:
|
||||||
* In einer Wueste, Sumpf oder Gletscher gezaubert kann innerhalb der
|
* In einer Wueste, Sumpf oder Gletscher gezaubert kann innerhalb der
|
||||||
* naechsten 6 Runden ein bis 6 Dracheneinheiten bis Groe<EFBFBD>e Wyrm
|
* naechsten 6 Runden ein bis 6 Dracheneinheiten bis Groesse Wyrm
|
||||||
* entstehen.
|
* entstehen.
|
||||||
*
|
*
|
||||||
* Mit Stufe 12-15 erscheinen Jung- oder normaler Drachen, mit Stufe
|
* Mit Stufe 12-15 erscheinen Jung- oder normaler Drachen, mit Stufe
|
||||||
|
@ -2803,7 +2803,7 @@ static int change_hitpoints(unit * u, int value)
|
||||||
|
|
||||||
hp += value;
|
hp += value;
|
||||||
|
|
||||||
/* Jede Person ben<EFBFBD>tigt mindestens 1 HP */
|
/* Jede Person benoetigt mindestens 1 HP */
|
||||||
if (hp < u->number) {
|
if (hp < u->number) {
|
||||||
if (hp < 0) { /* Einheit tot */
|
if (hp < 0) { /* Einheit tot */
|
||||||
hp = 0;
|
hp = 0;
|
||||||
|
@ -3680,7 +3680,7 @@ static int sp_rallypeasantmob(castorder * co)
|
||||||
* Gebiet: Cerddor
|
* Gebiet: Cerddor
|
||||||
* Wirkung:
|
* Wirkung:
|
||||||
* Wiegelt 60% bis 90% der Bauern einer Region auf. Bauern werden ein
|
* Wiegelt 60% bis 90% der Bauern einer Region auf. Bauern werden ein
|
||||||
* gro<EFBFBD>er Mob, der zur Monsterpartei gehoert und die Region bewacht.
|
* grosser Mob, der zur Monsterpartei gehoert und die Region bewacht.
|
||||||
* Regionssilber sollte auch nicht durch Unterhaltung gewonnen werden
|
* Regionssilber sollte auch nicht durch Unterhaltung gewonnen werden
|
||||||
* koennen.
|
* koennen.
|
||||||
*
|
*
|
||||||
|
@ -3941,7 +3941,7 @@ static int sp_recruit(castorder * co)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* Immer noch zuviel auf niedrigen Stufen. Deshalb die Rekrutierungskosten
|
/* Immer noch zuviel auf niedrigen Stufen. Deshalb die Rekrutierungskosten
|
||||||
* mit einfliessen lassen und dafuer den Exponenten etwas groe<EFBFBD>er.
|
* mit einfliessen lassen und dafuer den Exponenten etwas groesser.
|
||||||
* Wenn die Rekrutierungskosten deutlich hoeher sind als der Faktor,
|
* Wenn die Rekrutierungskosten deutlich hoeher sind als der Faktor,
|
||||||
* ist das Verhaeltniss von ausgegebene Aura pro Bauer bei Stufe 2
|
* ist das Verhaeltniss von ausgegebene Aura pro Bauer bei Stufe 2
|
||||||
* ein mehrfaches von Stufe 1, denn in beiden Faellen gibt es nur 1
|
* ein mehrfaches von Stufe 1, denn in beiden Faellen gibt es nur 1
|
||||||
|
@ -3972,7 +3972,7 @@ static int sp_recruit(castorder * co)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------- */
|
/* ------------------------------------------------------------- */
|
||||||
/* Name: Wanderprediger - Gro<EFBFBD>e Anwerbung
|
/* Name: Wanderprediger - Grosse Anwerbung
|
||||||
* Stufe: 14
|
* Stufe: 14
|
||||||
* Gebiet: Cerddor
|
* Gebiet: Cerddor
|
||||||
* Wirkung:
|
* Wirkung:
|
||||||
|
@ -4027,8 +4027,8 @@ static int sp_bigrecruit(castorder * co)
|
||||||
* Gebiet: Cerddor
|
* Gebiet: Cerddor
|
||||||
* Wirkung:
|
* Wirkung:
|
||||||
* Erliegt die Einheit dem Zauber, so wird sie dem Magier alles
|
* Erliegt die Einheit dem Zauber, so wird sie dem Magier alles
|
||||||
* erzaehlen, was sie ueber die gefragte Region wei<EFBFBD>. Ist in der Region
|
* erzaehlen, was sie ueber die gefragte Region weiss. Ist in der Region
|
||||||
* niemand ihrer Partei, so wei<EFBFBD> sie nichts zu berichten. Auch kann
|
* niemand ihrer Partei, so weiss sie nichts zu berichten. Auch kann
|
||||||
* sie nur das erzaehlen, was sie selber sehen koennte.
|
* sie nur das erzaehlen, was sie selber sehen koennte.
|
||||||
* Flags:
|
* Flags:
|
||||||
* (UNITSPELL | TESTCANSEE)
|
* (UNITSPELL | TESTCANSEE)
|
||||||
|
@ -4086,7 +4086,7 @@ static int sp_pump(castorder * co)
|
||||||
* Stufe: 6
|
* Stufe: 6
|
||||||
* Gebiet: Cerddor
|
* Gebiet: Cerddor
|
||||||
* Wirkung:
|
* Wirkung:
|
||||||
* Betoert eine Einheit, so das sie ihm den groe<EFBFBD>ten Teil ihres Bargelds
|
* Betoert eine Einheit, so dass sie ihm den groessten Teil ihres Bargelds
|
||||||
* und 50% ihres Besitzes schenkt. Sie behaelt jedoch immer soviel, wie
|
* und 50% ihres Besitzes schenkt. Sie behaelt jedoch immer soviel, wie
|
||||||
* sie zum ueberleben braucht. Wirkt gegen Magieresistenz.
|
* sie zum ueberleben braucht. Wirkt gegen Magieresistenz.
|
||||||
* min(Stufe*1000$, u->money - maintenance)
|
* min(Stufe*1000$, u->money - maintenance)
|
||||||
|
@ -4256,7 +4256,7 @@ static int sp_headache(castorder * co)
|
||||||
if (target->number == 0 || pa->param[0]->flag == TARGET_NOTFOUND)
|
if (target->number == 0 || pa->param[0]->flag == TARGET_NOTFOUND)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* finde das groe<EFBFBD>te Talent: */
|
/* finde das groesste Talent: */
|
||||||
for (i = 0; i != target->skill_size; ++i) {
|
for (i = 0; i != target->skill_size; ++i) {
|
||||||
skill *sv = target->skills + i;
|
skill *sv = target->skills + i;
|
||||||
if (smax == NULL || skill_compare(sv, smax) > 0) {
|
if (smax == NULL || skill_compare(sv, smax) > 0) {
|
||||||
|
@ -4405,7 +4405,7 @@ int sp_puttorest(castorder * co)
|
||||||
return co->level;
|
return co->level;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Name: Traumschloe<EFBFBD>chen
|
/* Name: Traumschloesschen
|
||||||
* Stufe: 3
|
* Stufe: 3
|
||||||
* Kategorie: Region, Gebaeude, positiv
|
* Kategorie: Region, Gebaeude, positiv
|
||||||
* Gebiet: Illaun
|
* Gebiet: Illaun
|
||||||
|
@ -4440,7 +4440,7 @@ int sp_icastle(castorder * co)
|
||||||
|
|
||||||
b = new_building(bt_illusion, r, mage->faction->locale);
|
b = new_building(bt_illusion, r, mage->faction->locale);
|
||||||
|
|
||||||
/* Groe<EFBFBD>e festlegen. */
|
/* Groesse festlegen. */
|
||||||
if (type == bt_illusion) {
|
if (type == bt_illusion) {
|
||||||
b->size = (rng_int() % (int)((power * power) + 1) * 10);
|
b->size = (rng_int() % (int)((power * power) + 1) * 10);
|
||||||
}
|
}
|
||||||
|
@ -4613,7 +4613,7 @@ int sp_baddreams(castorder * co)
|
||||||
* Kategorie:
|
* Kategorie:
|
||||||
* Wirkung:
|
* Wirkung:
|
||||||
* Dieser Zauber ermoeglicht es dem Traeumer, den Schlaf aller aliierten
|
* Dieser Zauber ermoeglicht es dem Traeumer, den Schlaf aller aliierten
|
||||||
* Einheiten in der Region so zu beeinflussen, da<EFBFBD> sie fuer einige Zeit
|
* Einheiten in der Region so zu beeinflussen, dass sie fuer einige Zeit
|
||||||
* einen Bonus von 1 Talentstufe in allen Talenten
|
* einen Bonus von 1 Talentstufe in allen Talenten
|
||||||
* bekommen. Der Zauber wirkt erst im Folgemonat.
|
* bekommen. Der Zauber wirkt erst im Folgemonat.
|
||||||
* Flags:
|
* Flags:
|
||||||
|
|
|
@ -62,7 +62,7 @@ static const char *spell_damage(int sp)
|
||||||
{
|
{
|
||||||
switch (sp) {
|
switch (sp) {
|
||||||
case 0:
|
case 0:
|
||||||
/* meist t<EFBFBD>dlich 20-65 HP */
|
/* meist toetlich 20-65 HP */
|
||||||
return "5d10+15";
|
return "5d10+15";
|
||||||
case 1:
|
case 1:
|
||||||
/* sehr variabel 4-48 HP */
|
/* sehr variabel 4-48 HP */
|
||||||
|
@ -71,7 +71,7 @@ static const char *spell_damage(int sp)
|
||||||
/* leicht verwundet 4-18 HP */
|
/* leicht verwundet 4-18 HP */
|
||||||
return "2d8+2";
|
return "2d8+2";
|
||||||
case 3:
|
case 3:
|
||||||
/* fast immer t<EFBFBD>dlich 30-50 HP */
|
/* fast immer toetlich 30-50 HP */
|
||||||
return "5d5+25";
|
return "5d5+25";
|
||||||
case 4:
|
case 4:
|
||||||
/* verwundet 11-26 HP */
|
/* verwundet 11-26 HP */
|
||||||
|
@ -335,11 +335,11 @@ int sp_combatrosthauch(struct castorder * co)
|
||||||
selist_free(fgs);
|
selist_free(fgs);
|
||||||
|
|
||||||
if (k == 0) {
|
if (k == 0) {
|
||||||
/* keine Waffen mehr da, die zerst<EFBFBD>rt werden k<>nnten */
|
/* keine Waffen mehr da, die zerstoert werden koennten */
|
||||||
message *msg = msg_message("rust_effect_1", "mage", fi->unit);
|
message *msg = msg_message("rust_effect_1", "mage", fi->unit);
|
||||||
message_all(b, msg);
|
message_all(b, msg);
|
||||||
msg_release(msg);
|
msg_release(msg);
|
||||||
fi->magic = 0; /* k<EFBFBD>mpft nichtmagisch weiter */
|
fi->magic = 0; /* kaempft nichtmagisch weiter */
|
||||||
level = 0;
|
level = 0;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -405,7 +405,7 @@ int sp_speed(struct castorder * co)
|
||||||
|
|
||||||
allies =
|
allies =
|
||||||
count_allies(fi->side, FIGHT_ROW, BEHIND_ROW, SELECT_ADVANCE, ALLY_ANY);
|
count_allies(fi->side, FIGHT_ROW, BEHIND_ROW, SELECT_ADVANCE, ALLY_ANY);
|
||||||
/* maximal 2*allies Versuche ein Opfer zu finden, ansonsten best<EFBFBD>nde
|
/* maximal 2*allies Versuche ein Opfer zu finden, ansonsten bestuende
|
||||||
* die Gefahr eine Endlosschleife*/
|
* die Gefahr eine Endlosschleife*/
|
||||||
allies *= 2;
|
allies *= 2;
|
||||||
|
|
||||||
|
@ -871,7 +871,7 @@ static bool select_afraid(const side *vs, const fighter *fig, void *cbdata)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Gesang der Furcht (Kampfzauber) */
|
/* Gesang der Furcht (Kampfzauber) */
|
||||||
/* Panik (Pr<EFBFBD>kampfzauber) */
|
/* Panik (Praekampfzauber) */
|
||||||
int flee_spell(struct castorder * co, int strength)
|
int flee_spell(struct castorder * co, int strength)
|
||||||
{
|
{
|
||||||
fighter * fi = co->magician.fig;
|
fighter * fi = co->magician.fig;
|
||||||
|
@ -900,7 +900,7 @@ int flee_spell(struct castorder * co, int strength)
|
||||||
fighter *df = (fighter *)selist_get(ql, qi);
|
fighter *df = (fighter *)selist_get(ql, qi);
|
||||||
|
|
||||||
for (n = 0; force > 0 && n != df->alive; ++n) {
|
for (n = 0; force > 0 && n != df->alive; ++n) {
|
||||||
if (df->person[n].flags & FL_PANICED) { /* bei SPL_SONG_OF_FEAR m<EFBFBD>glich */
|
if (df->person[n].flags & FL_PANICED) { /* bei SPL_SONG_OF_FEAR moeglich */
|
||||||
df->person[n].attack -= 1;
|
df->person[n].attack -= 1;
|
||||||
--force;
|
--force;
|
||||||
++panik;
|
++panik;
|
||||||
|
@ -944,7 +944,7 @@ int sp_hero(struct castorder * co)
|
||||||
|
|
||||||
allies =
|
allies =
|
||||||
count_allies(fi->side, FIGHT_ROW, BEHIND_ROW, SELECT_ADVANCE, ALLY_ANY);
|
count_allies(fi->side, FIGHT_ROW, BEHIND_ROW, SELECT_ADVANCE, ALLY_ANY);
|
||||||
/* maximal 2*allies Versuche ein Opfer zu finden, ansonsten best<EFBFBD>nde
|
/* maximal 2*allies Versuche ein Opfer zu finden, ansonsten bestuende
|
||||||
* die Gefahr eine Endlosschleife*/
|
* die Gefahr eine Endlosschleife*/
|
||||||
allies *= 2;
|
allies *= 2;
|
||||||
|
|
||||||
|
@ -992,7 +992,7 @@ int sp_berserk(struct castorder * co)
|
||||||
|
|
||||||
allies =
|
allies =
|
||||||
count_allies(fi->side, FIGHT_ROW, BEHIND_ROW - 1, SELECT_ADVANCE, ALLY_ANY);
|
count_allies(fi->side, FIGHT_ROW, BEHIND_ROW - 1, SELECT_ADVANCE, ALLY_ANY);
|
||||||
/* maximal 2*allies Versuche ein Opfer zu finden, ansonsten best<EFBFBD>nde
|
/* maximal 2*allies Versuche ein Opfer zu finden, ansonsten bestuende
|
||||||
* die Gefahr eine Endlosschleife*/
|
* die Gefahr eine Endlosschleife*/
|
||||||
allies *= 2;
|
allies *= 2;
|
||||||
|
|
||||||
|
@ -1181,7 +1181,7 @@ int sp_reeling_arrows(struct castorder * co)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Magier weicht dem Kampf aus. Wenn er sich bewegen kann, zieht er in
|
/* Magier weicht dem Kampf aus. Wenn er sich bewegen kann, zieht er in
|
||||||
* eine Nachbarregion, wobei ein NACH ber<EFBFBD>cksichtigt wird. Ansonsten
|
* eine Nachbarregion, wobei ein NACH beruecksichtigt wird. Ansonsten
|
||||||
* bleibt er stehen und nimmt nicht weiter am Kampf teil. */
|
* bleibt er stehen und nimmt nicht weiter am Kampf teil. */
|
||||||
int sp_appeasement(struct castorder * co)
|
int sp_appeasement(struct castorder * co)
|
||||||
{
|
{
|
||||||
|
@ -1194,7 +1194,7 @@ int sp_appeasement(struct castorder * co)
|
||||||
region *r = b->region;
|
region *r = b->region;
|
||||||
message *m;
|
message *m;
|
||||||
|
|
||||||
/* Fliehende Einheiten verlassen auf jeden Fall Geb<EFBFBD>ude und Schiffe. */
|
/* Fliehende Einheiten verlassen auf jeden Fall Gebaeude und Schiffe. */
|
||||||
if (!(r->terrain->flags & SEA_REGION)) {
|
if (!(r->terrain->flags & SEA_REGION)) {
|
||||||
leave(mage, false);
|
leave(mage, false);
|
||||||
}
|
}
|
||||||
|
@ -1202,7 +1202,7 @@ int sp_appeasement(struct castorder * co)
|
||||||
setguard(mage, false);
|
setguard(mage, false);
|
||||||
unit_setstatus(mage, ST_FLEE);
|
unit_setstatus(mage, ST_FLEE);
|
||||||
|
|
||||||
/* wir tun so, als w<EFBFBD>re die Person geflohen */
|
/* wir tun so, als waere die Person geflohen */
|
||||||
fi->flags |= FIG_NOLOOT;
|
fi->flags |= FIG_NOLOOT;
|
||||||
fi->run.hp = mage->hp;
|
fi->run.hp = mage->hp;
|
||||||
fi->run.number = mage->number;
|
fi->run.number = mage->number;
|
||||||
|
@ -1242,7 +1242,7 @@ int armor_spell(struct castorder * co, int per_level, int time_multi)
|
||||||
message_all(b, m);
|
message_all(b, m);
|
||||||
msg_release(m);
|
msg_release(m);
|
||||||
|
|
||||||
/* gibt R<EFBFBD>stung +effect f<>r duration Treffer */
|
/* gibt Ruestung +effect fuer duration Treffer */
|
||||||
|
|
||||||
effect = level / per_level;
|
effect = level / per_level;
|
||||||
duration = (int)(time_multi * power * power);
|
duration = (int)(time_multi * power * power);
|
||||||
|
@ -1286,7 +1286,7 @@ int sp_fumbleshield(struct castorder * co)
|
||||||
message_all(b, m);
|
message_all(b, m);
|
||||||
msg_release(m);
|
msg_release(m);
|
||||||
|
|
||||||
/* der erste Zauber schl<EFBFBD>gt mit 100% fehl */
|
/* der erste Zauber schlaegt mit 100% fehl */
|
||||||
duration = 100;
|
duration = 100;
|
||||||
effect = 25 - level;
|
effect = 25 - level;
|
||||||
if (effect < 1) effect = 1;
|
if (effect < 1) effect = 1;
|
||||||
|
@ -1344,7 +1344,7 @@ int sp_reanimate(struct castorder * co)
|
||||||
&& u_race(tf->unit) != get_race(RC_DAEMON)
|
&& u_race(tf->unit) != get_race(RC_DAEMON)
|
||||||
&& (chance(c))) {
|
&& (chance(c))) {
|
||||||
assert(tf->alive < tf->unit->number);
|
assert(tf->alive < tf->unit->number);
|
||||||
/* t.fighter->person[].hp beginnt mit t.index = 0 zu z<EFBFBD>hlen,
|
/* t.fighter->person[].hp beginnt mit t.index = 0 zu zaehlen,
|
||||||
* t.fighter->alive ist jedoch die Anzahl lebender in der Einheit,
|
* t.fighter->alive ist jedoch die Anzahl lebender in der Einheit,
|
||||||
* also sind die hp von t.fighter->alive
|
* also sind die hp von t.fighter->alive
|
||||||
* t.fighter->hitpoints[t.fighter->alive-1] und der erste Tote
|
* t.fighter->hitpoints[t.fighter->alive-1] und der erste Tote
|
||||||
|
|
|
@ -26,8 +26,8 @@
|
||||||
* Stufe: 6
|
* Stufe: 6
|
||||||
*
|
*
|
||||||
* Wirkung:
|
* Wirkung:
|
||||||
* Lae<EFBFBD>t ein Schiff eine Runde lang fliegen. Wirkt nur auf Boote
|
* Laesst ein Schiff eine Runde lang fliegen. Wirkt nur auf Boote
|
||||||
* bis Kapazit<EFBFBD>t 50.
|
* bis Kapazitaet 50.
|
||||||
* Kombinierbar mit "Guenstige Winde", aber nicht mit "Sturmwind".
|
* Kombinierbar mit "Guenstige Winde", aber nicht mit "Sturmwind".
|
||||||
*
|
*
|
||||||
* Flag:
|
* Flag:
|
||||||
|
|
|
@ -57,7 +57,7 @@ void expandstealing(region * r, econ_request * stealorders)
|
||||||
norders = expand_production(r, stealorders, &requests);
|
norders = expand_production(r, stealorders, &requests);
|
||||||
if (!norders) return;
|
if (!norders) return;
|
||||||
|
|
||||||
/* F<EFBFBD>r jede unit in der Region wird Geld geklaut, wenn sie Opfer eines
|
/* Fuer jede unit in der Region wird Geld geklaut, wenn sie Opfer eines
|
||||||
* Beklauen-Orders ist. Jedes Opfer muss einzeln behandelt werden.
|
* Beklauen-Orders ist. Jedes Opfer muss einzeln behandelt werden.
|
||||||
*
|
*
|
||||||
* u ist die beklaute unit. oa.unit ist die klauende unit.
|
* u ist die beklaute unit. oa.unit ist die klauende unit.
|
||||||
|
|
|
@ -859,7 +859,7 @@ void reduce_skill_days(unit *u, skill_t sk, int days) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Talente von Dämonen verschieben sich.
|
/** Talente von Daemonen verschieben sich.
|
||||||
*/
|
*/
|
||||||
void demon_skillchange(unit *u)
|
void demon_skillchange(unit *u)
|
||||||
{
|
{
|
||||||
|
|
16
src/upkeep.c
16
src/upkeep.c
|
@ -95,11 +95,11 @@ static bool hunger(int number, unit * u)
|
||||||
deathcounts(r, dead);
|
deathcounts(r, dead);
|
||||||
}
|
}
|
||||||
if (hpsub > 0) {
|
if (hpsub > 0) {
|
||||||
/* Jetzt die Sch<EFBFBD>den der nicht gestorbenen abziehen. */
|
/* Jetzt die Schaeden der nicht gestorbenen abziehen. */
|
||||||
u->hp -= hpsub;
|
u->hp -= hpsub;
|
||||||
/* Meldung nur, wenn noch keine f<EFBFBD>r Tote generiert. */
|
/* Meldung nur, wenn noch keine fuer Tote generiert. */
|
||||||
if (dead == 0) {
|
if (dead == 0) {
|
||||||
/* Durch unzureichende Ern<EFBFBD>hrung wird %s geschw<68>cht */
|
/* Durch unzureichende Ernaehrung wird %s geschwaecht */
|
||||||
ADDMSG(&u->faction->msgs, msg_message("malnourish", "unit region", u, r));
|
ADDMSG(&u->faction->msgs, msg_message("malnourish", "unit region", u, r));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -133,13 +133,13 @@ void get_food(region * r)
|
||||||
is_cold = insect_hunger && r_insectstalled(r);
|
is_cold = insect_hunger && r_insectstalled(r);
|
||||||
|
|
||||||
/* 1. Versorgung von eigenen Einheiten. Das vorhandene Silber
|
/* 1. Versorgung von eigenen Einheiten. Das vorhandene Silber
|
||||||
* wird zun<EFBFBD>chst so auf die Einheiten aufgeteilt, dass idealerweise
|
* wird zunaechst so auf die Einheiten aufgeteilt, dass idealerweise
|
||||||
* jede Einheit genug Silber f<EFBFBD>r ihren Unterhalt hat. */
|
* jede Einheit genug Silber fuer ihren Unterhalt hat. */
|
||||||
|
|
||||||
for (u = r->units; u; u = u->next) {
|
for (u = r->units; u; u = u->next) {
|
||||||
int need = lifestyle(u);
|
int need = lifestyle(u);
|
||||||
|
|
||||||
/* Erstmal zur<EFBFBD>cksetzen */
|
/* Erstmal zuruecksetzen */
|
||||||
freset(u, UFL_HUNGER);
|
freset(u, UFL_HUNGER);
|
||||||
|
|
||||||
if (u->ship && (u->ship->flags & SF_FISHING)) {
|
if (u->ship && (u->ship->flags & SF_FISHING)) {
|
||||||
|
@ -237,7 +237,7 @@ void get_food(region * r)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 3. bestimmen, wie viele Bauern gefressen werden.
|
/* 3. bestimmen, wie viele Bauern gefressen werden.
|
||||||
* bei fehlenden Bauern den D<EFBFBD>mon hungern lassen
|
* bei fehlenden Bauern den Daemon hungern lassen
|
||||||
*/
|
*/
|
||||||
for (u = r->units; u; u = u->next) {
|
for (u = r->units; u; u = u->next) {
|
||||||
const race * rc = u_race(u);
|
const race * rc = u_race(u);
|
||||||
|
@ -302,7 +302,7 @@ void get_food(region * r)
|
||||||
}
|
}
|
||||||
rsetpeasants(r, peasantfood / 10);
|
rsetpeasants(r, peasantfood / 10);
|
||||||
|
|
||||||
/* 3. Von den <EFBFBD>berlebenden das Geld abziehen: */
|
/* 3. Von den Ueberlebenden das Geld abziehen: */
|
||||||
for (u = r->units; u; u = u->next) {
|
for (u = r->units; u; u = u->next) {
|
||||||
int m = get_money(u);
|
int m = get_money(u);
|
||||||
int need = lifestyle(u);
|
int need = lifestyle(u);
|
||||||
|
|
Loading…
Reference in New Issue