einbau der bugfixes aus dem aktuellen beta-branch in die dev-version

This commit is contained in:
Enno Rehling 2001-03-04 18:41:27 +00:00
parent 460d62c3cf
commit 435e98f50c
16 changed files with 242 additions and 175 deletions

View File

@ -1,6 +1,5 @@
/* vi: set ts=2:
*
* $Id: creport.c,v 1.11 2001/02/25 19:31:38 enno Exp $
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
@ -67,7 +66,7 @@
#include <stdlib.h>
#include <string.h>
#define C_REPORT_VERSION 55
#define C_REPORT_VERSION 56
#define NEWBLOCKS (C_REPORT_VERSION>=35)
#define ENCODE_SPECIAL 1
@ -113,6 +112,13 @@ print_curses(FILE * F, void * obj, typ_t typ, attrib *a, int self)
}
fprintf(F, "\"%s\"\n", buf);
}
} else if (a->type==&at_effect && self) {
effect_data * data = (effect_data *)a->data.v;
if (!header) {
header = 1;
fputs("EFFECTS\n", F);
}
fprintf(F, "\"%d %s\"\n", data->value, locale_string(NULL, resourcename(data->type->itype->rtype, 0)));
}
a = a->next;
}
@ -470,10 +476,6 @@ cr_output_unit(FILE * F, region * r,
else if (i<0)
fprintf(F, "%d;alias\n", -i);
i = get_money(u);
#ifdef OLD_SILBER
if (i)
fprintf(F, "%d;Silber\n", i);
#endif
if (u->status)
fprintf(F, "%d;Kampfstatus\n", u->status);
i = u_geteffstealth(u);
@ -539,16 +541,6 @@ cr_output_unit(FILE * F, region * r,
}
}
}
#ifdef OLD_SILBER
/* silver information for other units */
else {
int i = get_money(u);
if (i / u->number >= 5000)
fprintf(F, "%d;Silber\n", 5000 * u->number);
else if (i / u->number >= 500)
fprintf(F, "%d;Silber\n", 500 * u->number);
}
#endif
/* items */
pr = 0;
if (f == u->faction || u->faction->race==RC_ILLUSION) {

View File

@ -1,6 +1,5 @@
/* vi: set ts=2:
*
* $Id: economy.c,v 1.8 2001/02/25 19:31:38 enno Exp $
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
@ -1982,7 +1981,7 @@ expandselling(region * r, request * sellorders)
}
}
hafenowner = gebaeude_vorhanden(r, &bt_harbour);
hafenowner = owner_buildingtyp(r, &bt_harbour);
if (maxb != (building *) NULL && maxowner != (unit *) NULL) {
maxeffsize = buildingeffsize(maxb, false);
@ -2000,7 +1999,7 @@ expandselling(region * r, request * sellorders)
* multiplier speichert r->demand für die debug message ab. */
max_products = rpeasants(r) / TRADE_FRACTION;
if (rterrain(r) == T_DESERT && gebaeude_vorhanden(r, &bt_caravan)) {
if (rterrain(r) == T_DESERT && buildingtype_exists(r, &bt_caravan)) {
max_products = rpeasants(r) * 2 / TRADE_FRACTION;
}
/* Verkauf: so programmiert, dass er leicht auf mehrere Gueter pro
@ -2130,7 +2129,7 @@ sell(region * r, unit * u, request ** sellorders, const char * cmd)
s = getstrtoken();
if (findparam(s) == P_ANY) {
n = (rpeasants(r) - rpeasants(r) / RECRUITFRACTION) / TRADE_FRACTION;
if (rterrain(r) == T_DESERT && gebaeude_vorhanden(r, &bt_caravan))
if (rterrain(r) == T_DESERT && buildingtype_exists(r, &bt_caravan))
n *= 2;
} else
n = atoi(s);

View File

@ -1,6 +1,5 @@
/* vi: set ts=2:
*
* $Id: laws.c,v 1.32 2001/02/28 22:14:56 enno Exp $
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
@ -235,7 +234,10 @@ get_food(region *r)
{
unit *u;
/* 1. Versorgung von eigenen Einheiten */
/* 1. Versorgung von eigenen Einheiten. Das vorhandene Silber
* wird zunächst so auf die Einheiten aufgeteilt, dass idealerweise
* jede Einheit genug Silber für ihren Unterhalt hat. */
for (u = r->units; u; u = u->next) {
int need = lifestyle(u);
@ -247,7 +249,7 @@ get_food(region *r)
unit *v;
for (v = r->units; need && v; v = v->next)
if (v->faction == u->faction && !is_monstrous(u)) {
if (v->faction == u->faction && !is_monstrous(v)) {
int give = get_money(v) - lifestyle(v);
give = max(0, give);
give = min(need, give);
@ -260,11 +262,10 @@ get_food(region *r)
}
}
/* 2. Versorgung durch Fremde: */
/* 2. Versorgung durch Fremde. Das Silber alliierter Einheiten wird
* entsprechend verteilt. */
for (u = r->units; u; u = u->next) {
int need = lifestyle(u);
/* Negative Silberbeträge kommen vor (Bug), deshalb geht
* need -= u->money nicht. */
need -= max(0, get_money(u));
@ -273,7 +274,7 @@ get_food(region *r)
for (v = r->units; need && v; v = v->next)
if (v->faction != u->faction && allied(v, u->faction, HELP_MONEY)
&& !is_monstrous(u)) {
&& !is_monstrous(v)) {
int give = lifestyle(v);
give = max(0, get_money(v) - give);
give = min(need, give);
@ -747,7 +748,7 @@ demographics(void)
if (r->land) for (dmd=r->land->demands;dmd;dmd=dmd->next) {
if (dmd->value>0 && dmd->value < MAXDEMAND) {
int rise = DMRISE;
if (gebaeude_vorhanden(r, &bt_harbour)) rise = DMRISEHAFEN;
if (buildingtype_exists(r, &bt_harbour)) rise = DMRISEHAFEN;
if (rand() % 100 < rise) dmd->value++;
}
}
@ -756,7 +757,7 @@ demographics(void)
for (n = 0; n != MAXLUXURIES; n++) {
int d = rdemand(r, n);
if (d > 0 && d < MAXDEMAND) {
if (gebaeude_vorhanden(r, &bt_harbour)) {
if (buildingtype_exists(r, &bt_harbour)) {
if (rand() % 100 < DMRISEHAFEN) {
d++;
}
@ -2901,6 +2902,27 @@ defaultorders (void)
void write_skillfix(void);
#endif
/* ************************************************************ */
/* GANZ WICHTIG! ALLE GEÄNDERTEN SPRÜCHE NEU ANZEIGEN */
/* GANZ WICHTIG! FÜGT AUCH NEUE ZAUBER IN DIE LISTE DER BEKANNTEN EIN */
/* ************************************************************ */
static void
update_spells(void)
{
region *r;
for(r=regions; r; r=r->next) {
unit *u;
for(u=r->units;u;u=u->next) {
sc_mage *m = get_mage(u);
if (u->faction->no != MONSTER_FACTION && m != NULL) {
if (m->magietyp == M_GRAU) continue;
updatespelllist(u);
}
}
}
}
void
processorders (void)
{
@ -3065,6 +3087,9 @@ processorders (void)
#ifdef SKILLFIX_SAVE
write_skillfix();
#endif
/* immer ausführen, wenn neue Sprüche dazugekommen sind, oder sich
* Beschreibungen geändert haben */
update_spells();
}
int

View File

@ -1,6 +1,5 @@
/* vi: set ts=2:
*
* $Id: report.c,v 1.19 2001/02/28 22:14:56 enno Exp $
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
@ -1206,7 +1205,7 @@ statistics(FILE * F, region * r, faction * f)
p / RECRUITFRACTION);
rps(F, buf);
if (gebaeude_vorhanden(r, &bt_caravan)) {
if (buildingtype_exists(r, &bt_caravan)) {
sprintf(buf, "Luxusgüter zum angegebenen Preis: %d",
(p * 2) / TRADE_FRACTION);
} else {

View File

@ -1,6 +1,5 @@
/* vi: set ts=2:
*
* $Id: battle.c,v 1.19 2001/02/24 12:50:47 enno Exp $
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
@ -368,7 +367,7 @@ select_corpse(battle * b, fighter * af)
for_each(df, b->fighters) {
/* Geflohene haben auch 0 hp, dürfen hier aber nicht ausgewählt
* werden! */
int dead = df->unit->number - (df->alive + df->run_number);
int dead = df->unit->number - (df->alive + df->run.number);
if (nonplayer(df->unit)) continue;
if (af && !helping(af->side, df->side))
@ -533,7 +532,7 @@ reportcasualties(battle * b, fighter * fig)
for (bf = b->factions;bf;bf=bf->next) {
faction * f = bf->faction;
struct message * m = new_message(f, "casualties%u:unit%r:runto%i:run%i:alive%i:fallen",
fig->unit, fig->run_to, fig->run_number, fig->alive, fig->unit->number - fig->alive - fig->run_number);
fig->unit, fig->run.region, fig->run.number, fig->alive, fig->unit->number - fig->alive - fig->run.number);
brecord(f, fig->unit->region, m);
}
}
@ -825,19 +824,19 @@ remove_troop(troop dt)
if (!df->alive) {
switch (du->race) {
case RC_FIREDRAGON:
change_item(du, I_DRACHENBLUT, du->number-df->run_number);
change_item(du, I_DRACHENBLUT, du->number-df->run.number);
break;
case RC_DRAGON:
change_item(du, I_DRACHENBLUT, (du->number-df->run_number) * 4);
change_item(du, I_DRAGONHEAD, du->number-df->run_number);
change_item(du, I_DRACHENBLUT, (du->number-df->run.number) * 4);
change_item(du, I_DRAGONHEAD, du->number-df->run.number);
break;
case RC_WYRM:
change_item(du, I_DRACHENBLUT, (du->number-df->run_number) * 10);
change_item(du, I_DRAGONHEAD, du->number-df->run_number);
change_item(du, I_DRACHENBLUT, (du->number-df->run.number) * 10);
change_item(du, I_DRAGONHEAD, du->number-df->run.number);
break;
case RC_SEASERPENT:
change_item(du, I_DRACHENBLUT, (du->number-df->run_number) * 6);
change_item(du, I_SEASERPENTHEAD, du->number-df->run_number);
change_item(du, I_DRACHENBLUT, (du->number-df->run.number) * 6);
change_item(du, I_SEASERPENTHEAD, du->number-df->run.number);
break;
}
@ -2050,30 +2049,11 @@ loot_items(fighter * corpse)
u->items = NULL;
while (itm) {
const item_type * itype = itm->type;
int i;
int keep, give;
if (corpse->run_number) {
/* es gibt flüchtlinge */
if (itype->capacity>0 || fval(itype, ITF_ANIMAL)) {
/* Regeländerung: Man muß das Tier nicht reiten können,
* um es vom Schlachtfeld mitzunehmen, ist ja nur
* eine Region weit. * */
keep = min(corpse->run_number, itm->number);
} else if (itm->type->weight <= 0) {
/* if it doesn't weigh anything, it won't slow us down */
keep = min(corpse->run_number, itm->number);
}
else keep = 0;
give = itm->number-keep;
}
else {
keep = 0;
give = itm->number;
}
if (give) for (i = 10; i != 0; i--) {
int loot = give / i;
give -= loot;
if (itm->number) {
for (i = 10; i != 0; i--) {
int loot = itm->number / i;
itm->number -= loot;
/* Looten tun hier immer nur die Gegner. Das
* ist als Ausgleich für die neue Loot-regel
* (nur ganz tote Einheiten) fair.
@ -2096,32 +2076,19 @@ loot_items(fighter * corpse)
}
}
}
if (keep) {
item * i = i_remove(&itm, itm);
i->number = keep;
i_add(&u->items, i);
} else {
i_free(i_remove(&itm, itm));
}
itm = itm->next;
}
}
void
loot_fleeing(unit* u, unit* runner) {
/* die einheit runner nimmt von der einheit u soviel sie kann
* in die nächste region mit. hier geschieht allerdings nur
* der transfer, nicht die eigentliche flucht */
int money = get_money(u) * runner->number / (u->number + runner->number);
money = min(money, runner->number * (PERSONCAPACITY(u) - race[u->race].weight) / SILVERWEIGHT);
set_money(runner, money);
change_money(u, -money);
if (effskill(runner, SK_RIDING) > 0) {
int horses = min(get_item(u, I_HORSE), runner->number);
change_item(runner, I_HORSE, horses);
change_item(u, I_HORSE, -horses);
}
static void
loot_fleeing(fighter* fig, unit* runner)
{
/* TODO: Vernünftig fixen */
runner->items = NULL;
assert(runner->items == NULL);
runner->items = fig->run.items;
fig->run.items = NULL;
}
static boolean
@ -2164,7 +2131,7 @@ aftermath(battle * b)
}
dead = du->number - df->alive;
dead -= df->run_number;
dead -= df->run.number;
#ifdef TROLLSAVE
/* Trolle können regenerieren */
if (df->alive > 0 && dead && du->race == RC_TROLL)
@ -2230,7 +2197,7 @@ aftermath(battle * b)
for_each(df, s->fighters) {
unit *du = df->unit;
int dead = du->number - df->alive - df->run_number;
int dead = du->number - df->alive - df->run.number;
int sum_hp = 0;
int n;
@ -2246,20 +2213,20 @@ aftermath(battle * b)
}
s->dead += dead;
s->flee += df->run_number;
s->flee += df->run.number;
if (df->alive == du->number) continue; /* nichts passiert */
reportcasualties(b, df);
scale_number(du, df->alive + df->run_number);
du->hp = sum_hp + df->run_hp;
scale_number(du, df->alive + df->run.number);
du->hp = sum_hp + df->run.hp;
/* die weggerannten werden später subtrahiert! */
assert(du->number >= 0);
/* Report the casualties */
if (df->run_hp) {
if (df->run.hp) {
/* Sonderbehandlung für sich auflösende Einheiten wie Wölfe,
* diese fliehen nicht in eine Nachbarregion sondern kehren
* nach dem Kampf zu ihrer Einheit zurück */
@ -2270,14 +2237,15 @@ aftermath(battle * b)
continue;
}
if (df->alive == 0) {
scale_number(du, df->run_number);
du->hp = df->run_hp;
scale_number(du, df->run.number);
du->hp = df->run.hp;
/* Distribute Loot */
if (!fval(df,FIG_NOLOOT)){
loot_fleeing(df, du);
loot_items(df);
}
} else {
unit *nu = createunit(du->region, du->faction, df->run_number, du->race);
unit *nu = createunit(du->region, du->faction, df->run.number, du->race);
skill_t sk;
for (sk = 0; sk != MAXSKILLS; ++sk) {
@ -2300,7 +2268,7 @@ aftermath(battle * b)
nu->irace = du->irace;
/* Fliehenden nehmen mit, was sie tragen können*/
loot_fleeing(du, nu);
loot_fleeing(df, nu);
set_string(&nu->lastorder, du->lastorder);
scale_number(du, df->alive);
@ -2308,24 +2276,22 @@ aftermath(battle * b)
du = nu;
}
set_string(&du->thisorder, "");
du->hp = df->run_hp;
du->hp = df->run.hp;
setguard(du, GUARD_NONE);
fset(du, FL_MOVED);
leave(du->region, du);
if (df->run_to) travel(r, du, df->run_to, 1);
if (df->run.region) travel(r, du, df->run.region, 1);
}
else if (df->alive==0) {
else if (df->alive==0) { /* alle sind tot, niemand geflohen. Einheit auflösen */
setguard(du, GUARD_NONE);
scale_number(du, 0);
/* Distribute Loot */
if (!fval(df, FIG_NOLOOT)) {
loot_items(df);
}
}
if (!nonplayer_race(du->race)) {
/* tote im kampf werden zu regionsuntoten:
* for each o them, a peasant will die as well */
* for each of them, a peasant will die as well */
is += dead;
}
} next(df);
@ -3237,6 +3203,50 @@ join_allies(battle * b)
}
}
extern struct item_type * i_silver;
void
flee(const troop dt)
{
fighter * fig = dt.fighter;
unit * u = fig->unit;
int carry = PERSONCAPACITY(u) - race[u->race].weight;
int money;
item ** ip = &u->items;
while (*ip) {
item * itm = *ip;
const item_type * itype = itm->type;
int keep = 0;
if (itype->capacity>0 || fval(itype, ITF_ANIMAL)) {
/* Regeländerung: Man muß das Tier nicht reiten können,
* um es vom Schlachtfeld mitzunehmen, ist ja nur
* eine Region weit. * */
keep = min(1, itm->number);
carry += itype->capacity; /* TODO: ist da das weight des tiers mit drin? */
} else if (itm->type->weight <= 0) {
/* if it doesn't weigh anything, it won't slow us down */
keep = itm->number;
}
if (itm->number==keep && keep>0) {
i_add(&fig->run.items, i_remove(ip, itm));
}
if (*ip==itm) ip = &itm->next;
}
/* we will take money with us */
money = get_money(u);
if (money > carry) money = carry;
i_change(&u->items, i_silver, -money);
i_change(&fig->run.items, i_silver, +money);
fig->run.hp += fig->person[dt.index].hp;
++fig->run.number;
remove_troop(dt);
}
void
do_battle(void)
{
@ -3257,7 +3267,7 @@ do_battle(void)
}
#endif
/* list_foreach geht nicht, wegen flee() */
/* list_foreach geht nicht, wegen flucht */
for (u = r->units; u != NULL; u = u->next) {
if (fval(u, FL_LONGACTION)) continue;
if (u->number > 0) {
@ -3474,8 +3484,8 @@ do_battle(void)
if (is_undead(u) || u->race == RC_SHADOWKNIGHT) continue;
if (u->ship) continue;
dt.fighter = fig;
if (!fig->run_to) fig->run_to = fleeregion(u);
r = fig->run_to;
if (!fig->run.region) fig->run.region = fleeregion(u);
r = fig->run.region;
if (!r)
continue;
dt.index = fig->alive - fig->removed;
@ -3501,9 +3511,7 @@ do_battle(void)
}
if (chance(min(fleechance(u)+ispaniced, 0.90))) {
++runners;
fig->run_hp += fig->person[dt.index].hp;
++fig->run_number;
remove_troop(dt);
flee(dt);
if (b->small) {
sprintf(smallbuf, "%s/%d gelingt es, vom Schlachtfeld zu entkommen.",
unitname(fig->unit), dt.index);

View File

@ -169,9 +169,12 @@ typedef struct fighter {
struct weapon * secondary; /* defensive weapon */
} * person;
int flags;
int run_number; /* number of people who have flown */
int run_hp; /* accumulated hp of fleeing people */
struct region *run_to; /* destination of fleeing people */
struct {
int number; /* number of people who have flown */
int hp; /* accumulated hp of fleeing people */
struct region *region; /* destination of fleeing people */
struct item * items; /* items they take */
} run;
int action_counter; /* number of active actions the struct unit did in the fight */
#ifdef SHOW_KILLS
int kills;
@ -230,5 +233,6 @@ extern struct region * fleeregion(const struct unit * u);
extern boolean enemy (const struct side * a, const struct side * b);
extern struct troop select_corpse(struct battle * b, struct fighter * af);
extern fighter * make_fighter(struct battle * b, struct unit * u, boolean attack);
void flee(const troop dt);
#endif

View File

@ -1,6 +1,6 @@
/* vi: set ts=2:
*
* $Id: build.c,v 1.8 2001/02/18 10:06:09 enno Exp $
* $Id: build.c,v 1.9 2001/03/04 18:41:25 enno Exp $
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
@ -388,19 +388,19 @@ build_road(region * r, unit * u, int size, direction_t d)
if (rterrain(r) == T_SWAMP)
/* wenn kein Damm existiert */
if (!gebaeude_vorhanden(r, &bt_dam)) {
if (!buildingtype_exists(r, &bt_dam)) {
cmistake(u, findorder(u, u->thisorder), 132, MSG_PRODUCE);
return;
}
if (rterrain(r) == T_DESERT)
/* wenn keine Karawanserei existiert */
if (!gebaeude_vorhanden(r, &bt_caravan)) {
if (!buildingtype_exists(r, &bt_caravan)) {
cmistake(u, findorder(u, u->thisorder), 133, MSG_PRODUCE);
return;
}
if (rterrain(r) == T_GLACIER)
/* wenn kein Tunnel existiert */
if (!gebaeude_vorhanden(r, &bt_tunnel)) {
if (!buildingtype_exists(r, &bt_tunnel)) {
cmistake(u, findorder(u, u->thisorder), 131, MSG_PRODUCE);
return;
}
@ -689,7 +689,7 @@ build_building(unit * u, const building_type * btype, int want)
if (!b && u->building && u->building->type==btype) b = u->building;
if (b) btype = b->type;
if (fval(btype, BTF_UNIQUE) && gebaeude_vorhanden(r, btype) != (unit *) NULL) {
if (fval(btype, BTF_UNIQUE) && buildingtype_exists(r, btype)) {
/* only one of these per region */
cmistake(u, findorder(u, u->thisorder), 93, MSG_PRODUCE);
return;

View File

@ -1153,6 +1153,9 @@ sp_reeling_arrows(fighter * fi, int level, int force, spell * sp)
int
sp_denyattack(fighter * fi, int level, int power, spell * sp)
{
/* Magier weicht dem Kampf aus. Wenn er sich bewegen kann, zieht er in
* eine Nachbarregion, wobei ein NACH berücksichtigt wird. Ansonsten
* bleibt er stehen und nimmt nicht weiter am Kampf teil. */
side *sf = fi->side;
battle *b = fi->side->battle;
unit *mage = fi->unit;
@ -1173,26 +1176,26 @@ sp_denyattack(fighter * fi, int level, int power, spell * sp)
if (igetkeyword(mage->thisorder) == K_MOVE
|| igetkeyword(mage->thisorder) == K_ROUTE)
{
fi->run_to = movewhere(r, mage);
if (!fi->run_to) {
fi->run.region = movewhere(r, mage);
if (!fi->run.region) {
cmistake(mage, findorder(mage, mage->thisorder), 71, MSG_MOVE);
fi->run_to = fleeregion(mage);
fi->run.region = fleeregion(mage);
}
} else {
fi->run_to = fleeregion(mage);
fi->run.region = fleeregion(mage);
}
travel(r, mage, fi->run_to, 1);
travel(r, mage, fi->run.region, 1);
/* wir tun so, als wäre die Person geflohen */
fi->run_hp = mage->hp; /* Magier sind immer Einzelpersonen */
fi->run_number = mage->number;
fi->alive = 0;
fset(fi, FIG_NOLOOT);
fi->run.hp = mage->hp;
fi->run.number = mage->number;
fi->alive = 0;
sf->size[SUM_ROW] -= mage->number;
sf->size[mage->status + FIGHT_ROW] -= mage->number;
scat("Das Kampfgetümmel erstirbt und der Magier kann unbehelligt "
"seines Wege ziehen.");
scat("Das Kampfgetümmel erstirbt und er kann unbehelligt "
"seines Weges ziehen.");
battlerecord(b, buf);
return level;
}
@ -1529,11 +1532,11 @@ sp_undeadhero(fighter * fi, int level, int force, spell * sp)
if (nonplayer(du))
continue;
if (df->alive + df->run_number < du->number) {
if (df->alive + df->run.number < du->number) {
j = 0;
/* Wieviele Untote können wir aus dieser Einheit wecken? */
for (n = df->alive + df->run_number; n <= du->number; n++) {
for (n = df->alive + df->run.number; n <= du->number; n++) {
if (!k) break;
if (chance(c)) {

View File

@ -1,6 +1,6 @@
/* vi: set ts=2:
*
* $Id: item.c,v 1.13 2001/02/18 08:37:57 enno Exp $
* $Id: item.c,v 1.14 2001/03/04 18:41:25 enno Exp $
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
@ -1348,8 +1348,8 @@ init_olditems(void)
if (!strcmp(translation[ci][0], itemdata[i].name[0])) {
name[0] = translation[ci][1];
name[1] = translation[ci][2];
appearance[0] = translation[ci][2];
appearance[1] = translation[ci][3];
appearance[0] = translation[ci][3];
appearance[1] = translation[ci][4];
}
}
}
@ -1978,7 +1978,6 @@ init_resources(void)
}
int
get_money(const unit * u)
{
const item * i = u->items;
@ -1987,7 +1986,8 @@ get_money(const unit * u)
return i->number;
}
int set_money(unit * u, int v)
int
set_money(unit * u, int v)
{
item ** ip = &u->items;
while (*ip && (*ip)->type!=i_silver) ip = &(*ip)->next;

View File

@ -1,6 +1,6 @@
/* vi: set ts=2:
*
* $Id: movement.c,v 1.14 2001/02/19 16:45:23 katze Exp $
* $Id: movement.c,v 1.15 2001/03/04 18:41:25 enno Exp $
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
@ -1240,7 +1240,7 @@ ship_ready(region * r, unit * u)
}
unit *
gebaeude_vorhanden(const region * r, const building_type * bt)
owner_buildingtyp(const region * r, const building_type * bt)
{
building *b;
unit *owner;
@ -1257,6 +1257,38 @@ gebaeude_vorhanden(const region * r, const building_type * bt)
return NULL;
}
boolean
buildingtype_exists(const region * r, const building_type * bt)
{
building *b;
for (b = rbuildings(r); b; b = b->next) {
if (b->type == bt) {
if (b->size >= bt->maxsize) {
return true;
}
}
}
return false;
}
boolean
check_working_buildingtype(const region * r, const building_type * bt)
{
building *b;
for (b = rbuildings(r); b; b = b->next) {
if (b->type == bt) {
if (b->size >= bt->maxsize && fval(b, BLD_WORKING)) {
return true;
}
}
}
return false;
}
/* Prüft, ob Ablegen von einer Küste in eine der erlaubten Richtungen erfolgt. */
boolean
@ -1273,7 +1305,7 @@ check_takeoff(ship *sh, region *from, region *to)
coastl = (direction_t)((coast+MAXDIRECTIONS-1) % MAXDIRECTIONS);
if(dir != coast && dir != coastl && dir != coastr
&& gebaeude_vorhanden(from, &bt_harbour) == NULL)
&& check_working_buildingtype(from, &bt_harbour) == false)
{
return false;
}
@ -1282,10 +1314,11 @@ check_takeoff(ship *sh, region *from, region *to)
return true;
}
boolean ship_allowed(const struct ship_type * type, region * r)
boolean
ship_allowed(const struct ship_type * type, region * r)
{
int c = 0;
if (gebaeude_vorhanden(r, &bt_harbour)) return true;
if (check_working_buildingtype(r, &bt_harbour)) return true;
for (c=0;type->coast[c]!=NOTERRAIN;++c) {
if (type->coast[c]==rterrain(r)) return true;
}
@ -1549,7 +1582,7 @@ sail(region * starting_point, unit * u, region * next_point, boolean move_on_lan
/* Hafengebühren ? */
hafenmeister = gebaeude_vorhanden(current_point, &bt_harbour);
hafenmeister = owner_buildingtyp(current_point, &bt_harbour);
if (sh && hafenmeister != NULL) {
item * itm;
assert(trans==NULL);
@ -2000,7 +2033,6 @@ movement(void)
move(r, u, true);
set_string(&u->thisorder, "");
up = &r->units;
/* if (u==*up) up = &u->next; Blödsinn */
}
break;
default:

View File

@ -1,6 +1,6 @@
/* vi: set ts=2:
*
* $Id: movement.h,v 1.3 2001/02/18 10:06:09 enno Exp $
* $Id: movement.h,v 1.4 2001/03/04 18:41:25 enno Exp $
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
@ -62,5 +62,6 @@ extern attrib_type at_piracy_direction;
void follow(void);
struct building_type;
struct unit *gebaeude_vorhanden(const struct region * r, const struct building_type * bt);
boolean buildingtype_exists(const struct region * r, const struct building_type * bt);
struct unit* owner_buildingtyp(const struct region * r, const struct building_type * bt);
#endif

View File

@ -1,6 +1,5 @@
/* vi: set ts=2:
*
* $Id: save.c,v 1.23 2001/02/25 19:31:39 enno Exp $
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
@ -462,7 +461,7 @@ readfaction(void)
f->lastorders = turn;
} else
printf(" WARNUNG: Befehle für die ungültige Partei Nr. %s;", fid);
log_warning(("Befehle für die ungültige Partei %s\n", fid));
return f;
}

View File

@ -1,6 +1,6 @@
/* vi: set ts=2:
*
* $Id: spell.c,v 1.12 2001/02/18 10:06:09 enno Exp $
* $Id: spell.c,v 1.13 2001/03/04 18:41:25 enno Exp $
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
@ -3070,7 +3070,7 @@ sp_unholypower(castorder *co)
for (i = 0; i < pa->length && n > 0; i++) {
race_t target_race;
unit *u = pa->param[n]->data.u;
unit *u = pa->param[i]->data.u;
switch(u->race) {
case RC_SKELETON:

View File

@ -1,6 +1,5 @@
/* vi: set ts=2:
*
* $Id: korrektur.c,v 1.29 2001/02/25 19:31:39 enno Exp $
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
@ -1056,7 +1055,6 @@ show_newspells(void)
}
}
}
updatespelllist(u);
}
}
}

View File

@ -1,6 +1,6 @@
/* vi: set ts=2:
*
* $Id: main.c,v 1.18 2001/02/18 10:06:10 enno Exp $
* $Id: main.c,v 1.19 2001/03/04 18:41:27 enno Exp $
* Eressea PB(E)M host Copyright (C) 1998-2000
* Christian Schlittchen (corwin@amber.kn-bremen.de)
* Katja Zedel (katze@felidae.kn-bremen.de)
@ -88,6 +88,7 @@ extern boolean nomer;
extern boolean nomsg;
extern boolean nobattle;
extern boolean nobattledebug;
static boolean printpotions;
#ifdef FUZZY_BASE36
extern int fuzzy_hits;
@ -102,7 +103,6 @@ struct settings global = {
extern void render_init(void);
#if 0
static void
print_potions(FILE * F)
{
@ -116,7 +116,6 @@ print_potions(FILE * F)
}
}
}
#endif
static char * orders = NULL;
static int nowrite = 0;
@ -148,8 +147,11 @@ game_init(void)
abort();
}
#endif
/* print_potions(stdout);
exit(0); */
if (printpotions) {
FILE * F = fopen("recipes.txt", "w");
print_potions(F);
fclose(F);
}
}
void
@ -436,6 +438,7 @@ usage(const char * prog, const char * arg)
"-r resdir : gibt das resourceverzeichnis an\n"
"-t turn : read this datafile, not the most current one\n"
"-o reportdir : gibt das reportverzeichnis an\n"
"-l logfile : specify an alternative logfile\n"
"--nomsg : keine Messages (RAM sparen)\n"
"--nobattle : keine Kämpfe\n"
"--nodebug : keine Logfiles für Kämpfe\n"
@ -475,6 +478,9 @@ read_args(int argc, char **argv)
case 'o':
g_reportdir = argv[++i];
break;
case 'D': /* DEBUG */
printpotions = true;
break;
case 'd':
g_datadir = argv[++i];
break;

View File

@ -28,7 +28,7 @@ forest_trail;de;der Wald von %s
swamp_trail;de;der Sumpf von %s
desert_trail;de;die Wüste von %s
highland_trail;de;das Hochland von %s
mountain_trail;de;die Berge von %s
mountain_trail;de;das Bergland von %s
glacier_trail;de;der Gletscher von %s
firewall_trail;de;eine %s
grassland_trail;de;die Steppe von %s
@ -357,3 +357,4 @@ p14s;de;Heiltr
# Spezialitems
lmsreward;de;Gürtel der Heldentaten
lmsrewards;de;Gürtel der Heldentaten