forked from github/server
einbau der bugfixes aus dem aktuellen beta-branch in die dev-version
This commit is contained in:
parent
460d62c3cf
commit
435e98f50c
|
@ -1,6 +1,5 @@
|
||||||
/* vi: set ts=2:
|
/* 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
|
* Eressea PB(E)M host Copyright (C) 1998-2000
|
||||||
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
||||||
* Katja Zedel (katze@felidae.kn-bremen.de)
|
* Katja Zedel (katze@felidae.kn-bremen.de)
|
||||||
|
@ -67,7 +66,7 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#define C_REPORT_VERSION 55
|
#define C_REPORT_VERSION 56
|
||||||
#define NEWBLOCKS (C_REPORT_VERSION>=35)
|
#define NEWBLOCKS (C_REPORT_VERSION>=35)
|
||||||
|
|
||||||
#define ENCODE_SPECIAL 1
|
#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);
|
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;
|
a = a->next;
|
||||||
}
|
}
|
||||||
|
@ -470,10 +476,6 @@ cr_output_unit(FILE * F, region * r,
|
||||||
else if (i<0)
|
else if (i<0)
|
||||||
fprintf(F, "%d;alias\n", -i);
|
fprintf(F, "%d;alias\n", -i);
|
||||||
i = get_money(u);
|
i = get_money(u);
|
||||||
#ifdef OLD_SILBER
|
|
||||||
if (i)
|
|
||||||
fprintf(F, "%d;Silber\n", i);
|
|
||||||
#endif
|
|
||||||
if (u->status)
|
if (u->status)
|
||||||
fprintf(F, "%d;Kampfstatus\n", u->status);
|
fprintf(F, "%d;Kampfstatus\n", u->status);
|
||||||
i = u_geteffstealth(u);
|
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 */
|
/* items */
|
||||||
pr = 0;
|
pr = 0;
|
||||||
if (f == u->faction || u->faction->race==RC_ILLUSION) {
|
if (f == u->faction || u->faction->race==RC_ILLUSION) {
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
/* vi: set ts=2:
|
/* 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
|
* Eressea PB(E)M host Copyright (C) 1998-2000
|
||||||
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
||||||
* Katja Zedel (katze@felidae.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) {
|
if (maxb != (building *) NULL && maxowner != (unit *) NULL) {
|
||||||
maxeffsize = buildingeffsize(maxb, false);
|
maxeffsize = buildingeffsize(maxb, false);
|
||||||
|
@ -2000,7 +1999,7 @@ expandselling(region * r, request * sellorders)
|
||||||
* multiplier speichert r->demand für die debug message ab. */
|
* multiplier speichert r->demand für die debug message ab. */
|
||||||
|
|
||||||
max_products = rpeasants(r) / TRADE_FRACTION;
|
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;
|
max_products = rpeasants(r) * 2 / TRADE_FRACTION;
|
||||||
}
|
}
|
||||||
/* Verkauf: so programmiert, dass er leicht auf mehrere Gueter pro
|
/* 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();
|
s = getstrtoken();
|
||||||
if (findparam(s) == P_ANY) {
|
if (findparam(s) == P_ANY) {
|
||||||
n = (rpeasants(r) - rpeasants(r) / RECRUITFRACTION) / TRADE_FRACTION;
|
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;
|
n *= 2;
|
||||||
} else
|
} else
|
||||||
n = atoi(s);
|
n = atoi(s);
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
/* vi: set ts=2:
|
/* 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
|
* Eressea PB(E)M host Copyright (C) 1998-2000
|
||||||
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
||||||
* Katja Zedel (katze@felidae.kn-bremen.de)
|
* Katja Zedel (katze@felidae.kn-bremen.de)
|
||||||
|
@ -235,7 +234,10 @@ get_food(region *r)
|
||||||
{
|
{
|
||||||
unit *u;
|
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) {
|
for (u = r->units; u; u = u->next) {
|
||||||
int need = lifestyle(u);
|
int need = lifestyle(u);
|
||||||
|
|
||||||
|
@ -247,7 +249,7 @@ get_food(region *r)
|
||||||
unit *v;
|
unit *v;
|
||||||
|
|
||||||
for (v = r->units; need && v; v = v->next)
|
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);
|
int give = get_money(v) - lifestyle(v);
|
||||||
give = max(0, give);
|
give = max(0, give);
|
||||||
give = min(need, 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) {
|
for (u = r->units; u; u = u->next) {
|
||||||
int need = lifestyle(u);
|
int need = lifestyle(u);
|
||||||
/* Negative Silberbeträge kommen vor (Bug), deshalb geht
|
|
||||||
* need -= u->money nicht. */
|
|
||||||
|
|
||||||
need -= max(0, get_money(u));
|
need -= max(0, get_money(u));
|
||||||
|
|
||||||
|
@ -273,7 +274,7 @@ get_food(region *r)
|
||||||
|
|
||||||
for (v = r->units; need && v; v = v->next)
|
for (v = r->units; need && v; v = v->next)
|
||||||
if (v->faction != u->faction && allied(v, u->faction, HELP_MONEY)
|
if (v->faction != u->faction && allied(v, u->faction, HELP_MONEY)
|
||||||
&& !is_monstrous(u)) {
|
&& !is_monstrous(v)) {
|
||||||
int give = lifestyle(v);
|
int give = lifestyle(v);
|
||||||
give = max(0, get_money(v) - give);
|
give = max(0, get_money(v) - give);
|
||||||
give = min(need, give);
|
give = min(need, give);
|
||||||
|
@ -747,7 +748,7 @@ demographics(void)
|
||||||
if (r->land) for (dmd=r->land->demands;dmd;dmd=dmd->next) {
|
if (r->land) for (dmd=r->land->demands;dmd;dmd=dmd->next) {
|
||||||
if (dmd->value>0 && dmd->value < MAXDEMAND) {
|
if (dmd->value>0 && dmd->value < MAXDEMAND) {
|
||||||
int rise = DMRISE;
|
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++;
|
if (rand() % 100 < rise) dmd->value++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -756,7 +757,7 @@ demographics(void)
|
||||||
for (n = 0; n != MAXLUXURIES; n++) {
|
for (n = 0; n != MAXLUXURIES; n++) {
|
||||||
int d = rdemand(r, n);
|
int d = rdemand(r, n);
|
||||||
if (d > 0 && d < MAXDEMAND) {
|
if (d > 0 && d < MAXDEMAND) {
|
||||||
if (gebaeude_vorhanden(r, &bt_harbour)) {
|
if (buildingtype_exists(r, &bt_harbour)) {
|
||||||
if (rand() % 100 < DMRISEHAFEN) {
|
if (rand() % 100 < DMRISEHAFEN) {
|
||||||
d++;
|
d++;
|
||||||
}
|
}
|
||||||
|
@ -2901,6 +2902,27 @@ defaultorders (void)
|
||||||
void write_skillfix(void);
|
void write_skillfix(void);
|
||||||
#endif
|
#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
|
void
|
||||||
processorders (void)
|
processorders (void)
|
||||||
{
|
{
|
||||||
|
@ -3065,6 +3087,9 @@ processorders (void)
|
||||||
#ifdef SKILLFIX_SAVE
|
#ifdef SKILLFIX_SAVE
|
||||||
write_skillfix();
|
write_skillfix();
|
||||||
#endif
|
#endif
|
||||||
|
/* immer ausführen, wenn neue Sprüche dazugekommen sind, oder sich
|
||||||
|
* Beschreibungen geändert haben */
|
||||||
|
update_spells();
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
/* vi: set ts=2:
|
/* 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
|
* Eressea PB(E)M host Copyright (C) 1998-2000
|
||||||
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
||||||
* Katja Zedel (katze@felidae.kn-bremen.de)
|
* Katja Zedel (katze@felidae.kn-bremen.de)
|
||||||
|
@ -1206,7 +1205,7 @@ statistics(FILE * F, region * r, faction * f)
|
||||||
p / RECRUITFRACTION);
|
p / RECRUITFRACTION);
|
||||||
rps(F, buf);
|
rps(F, buf);
|
||||||
|
|
||||||
if (gebaeude_vorhanden(r, &bt_caravan)) {
|
if (buildingtype_exists(r, &bt_caravan)) {
|
||||||
sprintf(buf, "Luxusgüter zum angegebenen Preis: %d",
|
sprintf(buf, "Luxusgüter zum angegebenen Preis: %d",
|
||||||
(p * 2) / TRADE_FRACTION);
|
(p * 2) / TRADE_FRACTION);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
/* vi: set ts=2:
|
/* 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
|
* Eressea PB(E)M host Copyright (C) 1998-2000
|
||||||
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
||||||
* Katja Zedel (katze@felidae.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) {
|
for_each(df, b->fighters) {
|
||||||
/* Geflohene haben auch 0 hp, dürfen hier aber nicht ausgewählt
|
/* Geflohene haben auch 0 hp, dürfen hier aber nicht ausgewählt
|
||||||
* werden! */
|
* 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 (nonplayer(df->unit)) continue;
|
||||||
|
|
||||||
if (af && !helping(af->side, df->side))
|
if (af && !helping(af->side, df->side))
|
||||||
|
@ -533,7 +532,7 @@ reportcasualties(battle * b, fighter * fig)
|
||||||
for (bf = b->factions;bf;bf=bf->next) {
|
for (bf = b->factions;bf;bf=bf->next) {
|
||||||
faction * f = bf->faction;
|
faction * f = bf->faction;
|
||||||
struct message * m = new_message(f, "casualties%u:unit%r:runto%i:run%i:alive%i:fallen",
|
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);
|
brecord(f, fig->unit->region, m);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -825,19 +824,19 @@ remove_troop(troop dt)
|
||||||
if (!df->alive) {
|
if (!df->alive) {
|
||||||
switch (du->race) {
|
switch (du->race) {
|
||||||
case RC_FIREDRAGON:
|
case RC_FIREDRAGON:
|
||||||
change_item(du, I_DRACHENBLUT, du->number-df->run_number);
|
change_item(du, I_DRACHENBLUT, du->number-df->run.number);
|
||||||
break;
|
break;
|
||||||
case RC_DRAGON:
|
case RC_DRAGON:
|
||||||
change_item(du, I_DRACHENBLUT, (du->number-df->run_number) * 4);
|
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_DRAGONHEAD, du->number-df->run.number);
|
||||||
break;
|
break;
|
||||||
case RC_WYRM:
|
case RC_WYRM:
|
||||||
change_item(du, I_DRACHENBLUT, (du->number-df->run_number) * 10);
|
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_DRAGONHEAD, du->number-df->run.number);
|
||||||
break;
|
break;
|
||||||
case RC_SEASERPENT:
|
case RC_SEASERPENT:
|
||||||
change_item(du, I_DRACHENBLUT, (du->number-df->run_number) * 6);
|
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_SEASERPENTHEAD, du->number-df->run.number);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2050,30 +2049,11 @@ loot_items(fighter * corpse)
|
||||||
u->items = NULL;
|
u->items = NULL;
|
||||||
|
|
||||||
while (itm) {
|
while (itm) {
|
||||||
const item_type * itype = itm->type;
|
|
||||||
int i;
|
int i;
|
||||||
int keep, give;
|
if (itm->number) {
|
||||||
if (corpse->run_number) {
|
for (i = 10; i != 0; i--) {
|
||||||
/* es gibt flüchtlinge */
|
int loot = itm->number / i;
|
||||||
if (itype->capacity>0 || fval(itype, ITF_ANIMAL)) {
|
itm->number -= loot;
|
||||||
/* 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;
|
|
||||||
/* Looten tun hier immer nur die Gegner. Das
|
/* Looten tun hier immer nur die Gegner. Das
|
||||||
* ist als Ausgleich für die neue Loot-regel
|
* ist als Ausgleich für die neue Loot-regel
|
||||||
* (nur ganz tote Einheiten) fair.
|
* (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
|
static void
|
||||||
loot_fleeing(unit* u, unit* runner) {
|
loot_fleeing(fighter* fig, unit* runner)
|
||||||
/* die einheit runner nimmt von der einheit u soviel sie kann
|
{
|
||||||
* in die nächste region mit. hier geschieht allerdings nur
|
/* TODO: Vernünftig fixen */
|
||||||
* der transfer, nicht die eigentliche flucht */
|
runner->items = NULL;
|
||||||
int money = get_money(u) * runner->number / (u->number + runner->number);
|
assert(runner->items == NULL);
|
||||||
|
runner->items = fig->run.items;
|
||||||
money = min(money, runner->number * (PERSONCAPACITY(u) - race[u->race].weight) / SILVERWEIGHT);
|
fig->run.items = NULL;
|
||||||
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 boolean
|
static boolean
|
||||||
|
@ -2164,7 +2131,7 @@ aftermath(battle * b)
|
||||||
}
|
}
|
||||||
|
|
||||||
dead = du->number - df->alive;
|
dead = du->number - df->alive;
|
||||||
dead -= df->run_number;
|
dead -= df->run.number;
|
||||||
#ifdef TROLLSAVE
|
#ifdef TROLLSAVE
|
||||||
/* Trolle können regenerieren */
|
/* Trolle können regenerieren */
|
||||||
if (df->alive > 0 && dead && du->race == RC_TROLL)
|
if (df->alive > 0 && dead && du->race == RC_TROLL)
|
||||||
|
@ -2230,7 +2197,7 @@ aftermath(battle * b)
|
||||||
|
|
||||||
for_each(df, s->fighters) {
|
for_each(df, s->fighters) {
|
||||||
unit *du = df->unit;
|
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 sum_hp = 0;
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
|
@ -2246,20 +2213,20 @@ aftermath(battle * b)
|
||||||
}
|
}
|
||||||
|
|
||||||
s->dead += dead;
|
s->dead += dead;
|
||||||
s->flee += df->run_number;
|
s->flee += df->run.number;
|
||||||
|
|
||||||
if (df->alive == du->number) continue; /* nichts passiert */
|
if (df->alive == du->number) continue; /* nichts passiert */
|
||||||
|
|
||||||
reportcasualties(b, df);
|
reportcasualties(b, df);
|
||||||
scale_number(du, df->alive + df->run_number);
|
scale_number(du, df->alive + df->run.number);
|
||||||
du->hp = sum_hp + df->run_hp;
|
du->hp = sum_hp + df->run.hp;
|
||||||
|
|
||||||
/* die weggerannten werden später subtrahiert! */
|
/* die weggerannten werden später subtrahiert! */
|
||||||
assert(du->number >= 0);
|
assert(du->number >= 0);
|
||||||
|
|
||||||
/* Report the casualties */
|
/* Report the casualties */
|
||||||
|
|
||||||
if (df->run_hp) {
|
if (df->run.hp) {
|
||||||
/* Sonderbehandlung für sich auflösende Einheiten wie Wölfe,
|
/* Sonderbehandlung für sich auflösende Einheiten wie Wölfe,
|
||||||
* diese fliehen nicht in eine Nachbarregion sondern kehren
|
* diese fliehen nicht in eine Nachbarregion sondern kehren
|
||||||
* nach dem Kampf zu ihrer Einheit zurück */
|
* nach dem Kampf zu ihrer Einheit zurück */
|
||||||
|
@ -2270,14 +2237,15 @@ aftermath(battle * b)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (df->alive == 0) {
|
if (df->alive == 0) {
|
||||||
scale_number(du, df->run_number);
|
scale_number(du, df->run.number);
|
||||||
du->hp = df->run_hp;
|
du->hp = df->run.hp;
|
||||||
/* Distribute Loot */
|
/* Distribute Loot */
|
||||||
if (!fval(df, FIG_NOLOOT)) {
|
if (!fval(df,FIG_NOLOOT)){
|
||||||
|
loot_fleeing(df, du);
|
||||||
loot_items(df);
|
loot_items(df);
|
||||||
}
|
}
|
||||||
} else {
|
} 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;
|
skill_t sk;
|
||||||
|
|
||||||
for (sk = 0; sk != MAXSKILLS; ++sk) {
|
for (sk = 0; sk != MAXSKILLS; ++sk) {
|
||||||
|
@ -2300,7 +2268,7 @@ aftermath(battle * b)
|
||||||
nu->irace = du->irace;
|
nu->irace = du->irace;
|
||||||
/* Fliehenden nehmen mit, was sie tragen können*/
|
/* Fliehenden nehmen mit, was sie tragen können*/
|
||||||
|
|
||||||
loot_fleeing(du, nu);
|
loot_fleeing(df, nu);
|
||||||
set_string(&nu->lastorder, du->lastorder);
|
set_string(&nu->lastorder, du->lastorder);
|
||||||
|
|
||||||
scale_number(du, df->alive);
|
scale_number(du, df->alive);
|
||||||
|
@ -2308,24 +2276,22 @@ aftermath(battle * b)
|
||||||
du = nu;
|
du = nu;
|
||||||
}
|
}
|
||||||
set_string(&du->thisorder, "");
|
set_string(&du->thisorder, "");
|
||||||
du->hp = df->run_hp;
|
du->hp = df->run.hp;
|
||||||
setguard(du, GUARD_NONE);
|
setguard(du, GUARD_NONE);
|
||||||
fset(du, FL_MOVED);
|
fset(du, FL_MOVED);
|
||||||
leave(du->region, du);
|
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);
|
setguard(du, GUARD_NONE);
|
||||||
scale_number(du, 0);
|
scale_number(du, 0);
|
||||||
/* Distribute Loot */
|
/* Distribute Loot */
|
||||||
if (!fval(df, FIG_NOLOOT)) {
|
|
||||||
loot_items(df);
|
loot_items(df);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (!nonplayer_race(du->race)) {
|
if (!nonplayer_race(du->race)) {
|
||||||
/* tote im kampf werden zu regionsuntoten:
|
/* 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;
|
is += dead;
|
||||||
}
|
}
|
||||||
} next(df);
|
} 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
|
void
|
||||||
do_battle(void)
|
do_battle(void)
|
||||||
{
|
{
|
||||||
|
@ -3257,7 +3267,7 @@ do_battle(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* list_foreach geht nicht, wegen flee() */
|
/* list_foreach geht nicht, wegen flucht */
|
||||||
for (u = r->units; u != NULL; u = u->next) {
|
for (u = r->units; u != NULL; u = u->next) {
|
||||||
if (fval(u, FL_LONGACTION)) continue;
|
if (fval(u, FL_LONGACTION)) continue;
|
||||||
if (u->number > 0) {
|
if (u->number > 0) {
|
||||||
|
@ -3474,8 +3484,8 @@ do_battle(void)
|
||||||
if (is_undead(u) || u->race == RC_SHADOWKNIGHT) continue;
|
if (is_undead(u) || u->race == RC_SHADOWKNIGHT) continue;
|
||||||
if (u->ship) continue;
|
if (u->ship) continue;
|
||||||
dt.fighter = fig;
|
dt.fighter = fig;
|
||||||
if (!fig->run_to) fig->run_to = fleeregion(u);
|
if (!fig->run.region) fig->run.region = fleeregion(u);
|
||||||
r = fig->run_to;
|
r = fig->run.region;
|
||||||
if (!r)
|
if (!r)
|
||||||
continue;
|
continue;
|
||||||
dt.index = fig->alive - fig->removed;
|
dt.index = fig->alive - fig->removed;
|
||||||
|
@ -3501,9 +3511,7 @@ do_battle(void)
|
||||||
}
|
}
|
||||||
if (chance(min(fleechance(u)+ispaniced, 0.90))) {
|
if (chance(min(fleechance(u)+ispaniced, 0.90))) {
|
||||||
++runners;
|
++runners;
|
||||||
fig->run_hp += fig->person[dt.index].hp;
|
flee(dt);
|
||||||
++fig->run_number;
|
|
||||||
remove_troop(dt);
|
|
||||||
if (b->small) {
|
if (b->small) {
|
||||||
sprintf(smallbuf, "%s/%d gelingt es, vom Schlachtfeld zu entkommen.",
|
sprintf(smallbuf, "%s/%d gelingt es, vom Schlachtfeld zu entkommen.",
|
||||||
unitname(fig->unit), dt.index);
|
unitname(fig->unit), dt.index);
|
||||||
|
|
|
@ -169,9 +169,12 @@ typedef struct fighter {
|
||||||
struct weapon * secondary; /* defensive weapon */
|
struct weapon * secondary; /* defensive weapon */
|
||||||
} * person;
|
} * person;
|
||||||
int flags;
|
int flags;
|
||||||
int run_number; /* number of people who have flown */
|
struct {
|
||||||
int run_hp; /* accumulated hp of fleeing people */
|
int number; /* number of people who have flown */
|
||||||
struct region *run_to; /* destination of fleeing people */
|
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 */
|
int action_counter; /* number of active actions the struct unit did in the fight */
|
||||||
#ifdef SHOW_KILLS
|
#ifdef SHOW_KILLS
|
||||||
int 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 boolean enemy (const struct side * a, const struct side * b);
|
||||||
extern struct troop select_corpse(struct battle * b, struct fighter * af);
|
extern struct troop select_corpse(struct battle * b, struct fighter * af);
|
||||||
extern fighter * make_fighter(struct battle * b, struct unit * u, boolean attack);
|
extern fighter * make_fighter(struct battle * b, struct unit * u, boolean attack);
|
||||||
|
void flee(const troop dt);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* vi: set ts=2:
|
/* 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
|
* Eressea PB(E)M host Copyright (C) 1998-2000
|
||||||
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
||||||
* Katja Zedel (katze@felidae.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)
|
if (rterrain(r) == T_SWAMP)
|
||||||
/* wenn kein Damm existiert */
|
/* 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);
|
cmistake(u, findorder(u, u->thisorder), 132, MSG_PRODUCE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (rterrain(r) == T_DESERT)
|
if (rterrain(r) == T_DESERT)
|
||||||
/* wenn keine Karawanserei existiert */
|
/* 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);
|
cmistake(u, findorder(u, u->thisorder), 133, MSG_PRODUCE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (rterrain(r) == T_GLACIER)
|
if (rterrain(r) == T_GLACIER)
|
||||||
/* wenn kein Tunnel existiert */
|
/* 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);
|
cmistake(u, findorder(u, u->thisorder), 131, MSG_PRODUCE);
|
||||||
return;
|
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 && u->building && u->building->type==btype) b = u->building;
|
||||||
if (b) btype = b->type;
|
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 */
|
/* only one of these per region */
|
||||||
cmistake(u, findorder(u, u->thisorder), 93, MSG_PRODUCE);
|
cmistake(u, findorder(u, u->thisorder), 93, MSG_PRODUCE);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -1153,6 +1153,9 @@ sp_reeling_arrows(fighter * fi, int level, int force, spell * sp)
|
||||||
int
|
int
|
||||||
sp_denyattack(fighter * fi, int level, int power, spell * sp)
|
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;
|
side *sf = fi->side;
|
||||||
battle *b = fi->side->battle;
|
battle *b = fi->side->battle;
|
||||||
unit *mage = fi->unit;
|
unit *mage = fi->unit;
|
||||||
|
@ -1173,26 +1176,26 @@ sp_denyattack(fighter * fi, int level, int power, spell * sp)
|
||||||
if (igetkeyword(mage->thisorder) == K_MOVE
|
if (igetkeyword(mage->thisorder) == K_MOVE
|
||||||
|| igetkeyword(mage->thisorder) == K_ROUTE)
|
|| igetkeyword(mage->thisorder) == K_ROUTE)
|
||||||
{
|
{
|
||||||
fi->run_to = movewhere(r, mage);
|
fi->run.region = movewhere(r, mage);
|
||||||
if (!fi->run_to) {
|
if (!fi->run.region) {
|
||||||
cmistake(mage, findorder(mage, mage->thisorder), 71, MSG_MOVE);
|
cmistake(mage, findorder(mage, mage->thisorder), 71, MSG_MOVE);
|
||||||
fi->run_to = fleeregion(mage);
|
fi->run.region = fleeregion(mage);
|
||||||
}
|
}
|
||||||
} else {
|
} 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 */
|
/* 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);
|
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[SUM_ROW] -= mage->number;
|
||||||
sf->size[mage->status + FIGHT_ROW] -= mage->number;
|
sf->size[mage->status + FIGHT_ROW] -= mage->number;
|
||||||
|
|
||||||
scat("Das Kampfgetümmel erstirbt und der Magier kann unbehelligt "
|
scat("Das Kampfgetümmel erstirbt und er kann unbehelligt "
|
||||||
"seines Wege ziehen.");
|
"seines Weges ziehen.");
|
||||||
battlerecord(b, buf);
|
battlerecord(b, buf);
|
||||||
return level;
|
return level;
|
||||||
}
|
}
|
||||||
|
@ -1529,11 +1532,11 @@ sp_undeadhero(fighter * fi, int level, int force, spell * sp)
|
||||||
if (nonplayer(du))
|
if (nonplayer(du))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (df->alive + df->run_number < du->number) {
|
if (df->alive + df->run.number < du->number) {
|
||||||
j = 0;
|
j = 0;
|
||||||
|
|
||||||
/* Wieviele Untote können wir aus dieser Einheit wecken? */
|
/* 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 (!k) break;
|
||||||
|
|
||||||
if (chance(c)) {
|
if (chance(c)) {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* vi: set ts=2:
|
/* 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
|
* Eressea PB(E)M host Copyright (C) 1998-2000
|
||||||
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
||||||
* Katja Zedel (katze@felidae.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])) {
|
if (!strcmp(translation[ci][0], itemdata[i].name[0])) {
|
||||||
name[0] = translation[ci][1];
|
name[0] = translation[ci][1];
|
||||||
name[1] = translation[ci][2];
|
name[1] = translation[ci][2];
|
||||||
appearance[0] = translation[ci][2];
|
appearance[0] = translation[ci][3];
|
||||||
appearance[1] = translation[ci][3];
|
appearance[1] = translation[ci][4];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1978,7 +1978,6 @@ init_resources(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
||||||
get_money(const unit * u)
|
get_money(const unit * u)
|
||||||
{
|
{
|
||||||
const item * i = u->items;
|
const item * i = u->items;
|
||||||
|
@ -1987,7 +1986,8 @@ get_money(const unit * u)
|
||||||
return i->number;
|
return i->number;
|
||||||
}
|
}
|
||||||
|
|
||||||
int set_money(unit * u, int v)
|
int
|
||||||
|
set_money(unit * u, int v)
|
||||||
{
|
{
|
||||||
item ** ip = &u->items;
|
item ** ip = &u->items;
|
||||||
while (*ip && (*ip)->type!=i_silver) ip = &(*ip)->next;
|
while (*ip && (*ip)->type!=i_silver) ip = &(*ip)->next;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* vi: set ts=2:
|
/* 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
|
* Eressea PB(E)M host Copyright (C) 1998-2000
|
||||||
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
||||||
* Katja Zedel (katze@felidae.kn-bremen.de)
|
* Katja Zedel (katze@felidae.kn-bremen.de)
|
||||||
|
@ -1240,7 +1240,7 @@ ship_ready(region * r, unit * u)
|
||||||
}
|
}
|
||||||
|
|
||||||
unit *
|
unit *
|
||||||
gebaeude_vorhanden(const region * r, const building_type * bt)
|
owner_buildingtyp(const region * r, const building_type * bt)
|
||||||
{
|
{
|
||||||
building *b;
|
building *b;
|
||||||
unit *owner;
|
unit *owner;
|
||||||
|
@ -1257,6 +1257,38 @@ gebaeude_vorhanden(const region * r, const building_type * bt)
|
||||||
return NULL;
|
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. */
|
/* Prüft, ob Ablegen von einer Küste in eine der erlaubten Richtungen erfolgt. */
|
||||||
|
|
||||||
boolean
|
boolean
|
||||||
|
@ -1273,7 +1305,7 @@ check_takeoff(ship *sh, region *from, region *to)
|
||||||
coastl = (direction_t)((coast+MAXDIRECTIONS-1) % MAXDIRECTIONS);
|
coastl = (direction_t)((coast+MAXDIRECTIONS-1) % MAXDIRECTIONS);
|
||||||
|
|
||||||
if(dir != coast && dir != coastl && dir != coastr
|
if(dir != coast && dir != coastl && dir != coastr
|
||||||
&& gebaeude_vorhanden(from, &bt_harbour) == NULL)
|
&& check_working_buildingtype(from, &bt_harbour) == false)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1282,10 +1314,11 @@ check_takeoff(ship *sh, region *from, region *to)
|
||||||
return true;
|
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;
|
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) {
|
for (c=0;type->coast[c]!=NOTERRAIN;++c) {
|
||||||
if (type->coast[c]==rterrain(r)) return true;
|
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 ? */
|
/* Hafengebühren ? */
|
||||||
|
|
||||||
hafenmeister = gebaeude_vorhanden(current_point, &bt_harbour);
|
hafenmeister = owner_buildingtyp(current_point, &bt_harbour);
|
||||||
if (sh && hafenmeister != NULL) {
|
if (sh && hafenmeister != NULL) {
|
||||||
item * itm;
|
item * itm;
|
||||||
assert(trans==NULL);
|
assert(trans==NULL);
|
||||||
|
@ -2000,7 +2033,6 @@ movement(void)
|
||||||
move(r, u, true);
|
move(r, u, true);
|
||||||
set_string(&u->thisorder, "");
|
set_string(&u->thisorder, "");
|
||||||
up = &r->units;
|
up = &r->units;
|
||||||
/* if (u==*up) up = &u->next; Blödsinn */
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* vi: set ts=2:
|
/* 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
|
* Eressea PB(E)M host Copyright (C) 1998-2000
|
||||||
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
||||||
* Katja Zedel (katze@felidae.kn-bremen.de)
|
* Katja Zedel (katze@felidae.kn-bremen.de)
|
||||||
|
@ -62,5 +62,6 @@ extern attrib_type at_piracy_direction;
|
||||||
void follow(void);
|
void follow(void);
|
||||||
|
|
||||||
struct building_type;
|
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
|
#endif
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
/* vi: set ts=2:
|
/* 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
|
* Eressea PB(E)M host Copyright (C) 1998-2000
|
||||||
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
||||||
* Katja Zedel (katze@felidae.kn-bremen.de)
|
* Katja Zedel (katze@felidae.kn-bremen.de)
|
||||||
|
@ -462,7 +461,7 @@ readfaction(void)
|
||||||
f->lastorders = turn;
|
f->lastorders = turn;
|
||||||
|
|
||||||
} else
|
} 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;
|
return f;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* vi: set ts=2:
|
/* 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
|
* Eressea PB(E)M host Copyright (C) 1998-2000
|
||||||
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
||||||
* Katja Zedel (katze@felidae.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++) {
|
for (i = 0; i < pa->length && n > 0; i++) {
|
||||||
race_t target_race;
|
race_t target_race;
|
||||||
unit *u = pa->param[n]->data.u;
|
unit *u = pa->param[i]->data.u;
|
||||||
|
|
||||||
switch(u->race) {
|
switch(u->race) {
|
||||||
case RC_SKELETON:
|
case RC_SKELETON:
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
/* vi: set ts=2:
|
/* 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
|
* Eressea PB(E)M host Copyright (C) 1998-2000
|
||||||
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
||||||
* Katja Zedel (katze@felidae.kn-bremen.de)
|
* Katja Zedel (katze@felidae.kn-bremen.de)
|
||||||
|
@ -1056,7 +1055,6 @@ show_newspells(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
updatespelllist(u);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* vi: set ts=2:
|
/* 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
|
* Eressea PB(E)M host Copyright (C) 1998-2000
|
||||||
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
||||||
* Katja Zedel (katze@felidae.kn-bremen.de)
|
* Katja Zedel (katze@felidae.kn-bremen.de)
|
||||||
|
@ -88,6 +88,7 @@ extern boolean nomer;
|
||||||
extern boolean nomsg;
|
extern boolean nomsg;
|
||||||
extern boolean nobattle;
|
extern boolean nobattle;
|
||||||
extern boolean nobattledebug;
|
extern boolean nobattledebug;
|
||||||
|
static boolean printpotions;
|
||||||
|
|
||||||
#ifdef FUZZY_BASE36
|
#ifdef FUZZY_BASE36
|
||||||
extern int fuzzy_hits;
|
extern int fuzzy_hits;
|
||||||
|
@ -102,7 +103,6 @@ struct settings global = {
|
||||||
|
|
||||||
extern void render_init(void);
|
extern void render_init(void);
|
||||||
|
|
||||||
#if 0
|
|
||||||
static void
|
static void
|
||||||
print_potions(FILE * F)
|
print_potions(FILE * F)
|
||||||
{
|
{
|
||||||
|
@ -116,7 +116,6 @@ print_potions(FILE * F)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
static char * orders = NULL;
|
static char * orders = NULL;
|
||||||
static int nowrite = 0;
|
static int nowrite = 0;
|
||||||
|
@ -148,8 +147,11 @@ game_init(void)
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
/* print_potions(stdout);
|
if (printpotions) {
|
||||||
exit(0); */
|
FILE * F = fopen("recipes.txt", "w");
|
||||||
|
print_potions(F);
|
||||||
|
fclose(F);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -436,6 +438,7 @@ usage(const char * prog, const char * arg)
|
||||||
"-r resdir : gibt das resourceverzeichnis an\n"
|
"-r resdir : gibt das resourceverzeichnis an\n"
|
||||||
"-t turn : read this datafile, not the most current one\n"
|
"-t turn : read this datafile, not the most current one\n"
|
||||||
"-o reportdir : gibt das reportverzeichnis an\n"
|
"-o reportdir : gibt das reportverzeichnis an\n"
|
||||||
|
"-l logfile : specify an alternative logfile\n"
|
||||||
"--nomsg : keine Messages (RAM sparen)\n"
|
"--nomsg : keine Messages (RAM sparen)\n"
|
||||||
"--nobattle : keine Kämpfe\n"
|
"--nobattle : keine Kämpfe\n"
|
||||||
"--nodebug : keine Logfiles für Kämpfe\n"
|
"--nodebug : keine Logfiles für Kämpfe\n"
|
||||||
|
@ -475,6 +478,9 @@ read_args(int argc, char **argv)
|
||||||
case 'o':
|
case 'o':
|
||||||
g_reportdir = argv[++i];
|
g_reportdir = argv[++i];
|
||||||
break;
|
break;
|
||||||
|
case 'D': /* DEBUG */
|
||||||
|
printpotions = true;
|
||||||
|
break;
|
||||||
case 'd':
|
case 'd':
|
||||||
g_datadir = argv[++i];
|
g_datadir = argv[++i];
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -28,7 +28,7 @@ forest_trail;de;der Wald von %s
|
||||||
swamp_trail;de;der Sumpf von %s
|
swamp_trail;de;der Sumpf von %s
|
||||||
desert_trail;de;die Wüste von %s
|
desert_trail;de;die Wüste von %s
|
||||||
highland_trail;de;das Hochland 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
|
glacier_trail;de;der Gletscher von %s
|
||||||
firewall_trail;de;eine %s
|
firewall_trail;de;eine %s
|
||||||
grassland_trail;de;die Steppe von %s
|
grassland_trail;de;die Steppe von %s
|
||||||
|
@ -357,3 +357,4 @@ p14s;de;Heiltr
|
||||||
|
|
||||||
# Spezialitems
|
# Spezialitems
|
||||||
lmsreward;de;Gürtel der Heldentaten
|
lmsreward;de;Gürtel der Heldentaten
|
||||||
|
lmsrewards;de;Gürtel der Heldentaten
|
||||||
|
|
Loading…
Reference in New Issue