From 5db83f62177712f6ad6d52cb56bce23a0cbd402d Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Tue, 8 Oct 2002 06:46:03 +0000 Subject: [PATCH] =?UTF-8?q?Bugfix=20D=C3=A4monenverschiebung=20Bugfix=20D?= =?UTF-8?q?=C3=A4monenfressen=20Bugfix=20Allianzcode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/gamecode/randenc.c | 34 +++++++++++++++++++++------------- src/common/gamecode/report.c | 2 +- src/common/kernel/border.c | 2 -- src/common/kernel/item.c | 3 +-- src/common/kernel/reports.c | 1 + src/common/kernel/save.c | 1 + src/common/kernel/skill.c | 19 +++++++++++-------- src/common/kernel/skill.h | 8 ++++---- src/common/modules/gmcmd.c | 4 +++- 9 files changed, 43 insertions(+), 31 deletions(-) diff --git a/src/common/gamecode/randenc.c b/src/common/gamecode/randenc.c index 1643a5d2b..a4d9467bb 100644 --- a/src/common/gamecode/randenc.c +++ b/src/common/gamecode/randenc.c @@ -1049,7 +1049,6 @@ randomevents(void) region *r; building *b, *b2; unit *u; - int unfed; /* Eiseberge */ for (r=regions; r; r=r->next) freset(r, RF_DH); @@ -1152,7 +1151,6 @@ randomevents(void) * sondern der Region zu gute kommt - und da ist der anwender schnuppe */ skill * sv; - int dc; if (!bfind) { unit * ud = u; while (ud) { @@ -1163,14 +1161,25 @@ randomevents(void) bfind = true; } if (r->planep==0 || !fval(r->planep, PFL_NOFEED)) { - unfed = (u->number - bauernblut) - peasantfood; - bauernblut = max(0, bauernblut-u->number); - if (unfed > 0) { + int demons = u->number; + if (bauernblut>=demons) { + bauernblut -= demons; + demons = 0; + } else if (bauernblut) { + demons-=bauernblut; + } + if (peasantfood>=demons) { + peasantfood -= demons; + demons = 0; + } else { + demons-=peasantfood; + } + if (demons > 0) { #ifdef DAEMON_HUNGER - hunger(u, unfed); /* nicht gefütterte dämonen hungern */ + hunger(u, demons); /* nicht gefütterte dämonen hungern */ #else c = 0; - for (n = 0; n < unfed; n++) { + for (n = 0; n != demons; n++) { if (rand() % 100 < 10) { c++; } @@ -1184,16 +1193,15 @@ randomevents(void) #endif } } - dc = max(u->number - bauernblut, 0); - dc = min(dc, peasantfood); - dc = peasantfood - max(u->number - bauernblut, 0); - dc = max(0, dc); sv = u->skills; while (sv!=u->skills+u->skill_size) { if (sv->level>0 && rand() % 100 < 25) { int weeks = 1+rand()%3; - if (rand() % 100 < 40) reduce_skill(u, sv, weeks); - else while (weeks--) learn_skill(u, sv->id, 1.0); + if (rand() % 100 < 40) { + reduce_skill(u, sv, weeks); + } else { + while (weeks--) learn_skill(u, sv->id, 1.0); + } } ++sv; } diff --git a/src/common/gamecode/report.c b/src/common/gamecode/report.c index e1ad4c6ff..5c0047789 100644 --- a/src/common/gamecode/report.c +++ b/src/common/gamecode/report.c @@ -1811,7 +1811,7 @@ list_address(FILE * F, const faction * uf, const faction_list * seenfactions) const faction * f = flist->data; if (f->no!=MONSTER_FACTION) { sprintf(buf, "%s: %s; %s", factionname(f), f->email, f->banner); - rparagraph(F, buf, 4, ALLIED(uf, f)?'+':'*'); + rparagraph(F, buf, 4, (char)(ALLIED(uf, f)?'+':'*')); } flist = flist->next; } diff --git a/src/common/kernel/border.c b/src/common/kernel/border.c index 11edad2fc..7b0e722d8 100644 --- a/src/common/kernel/border.c +++ b/src/common/kernel/border.c @@ -402,8 +402,6 @@ b_namequestportal(const border * b, const region * r, const struct faction * f, return "gewaltiges offenes Tor"; } } - - return ""; } border_type bt_questportal = { diff --git a/src/common/kernel/item.c b/src/common/kernel/item.c index 9daa245e9..ee1d27b25 100644 --- a/src/common/kernel/item.c +++ b/src/common/kernel/item.c @@ -1294,10 +1294,9 @@ use_oldresource(region * r, const resource_type * rtype, int norders) #if GROWING_TREES int avail_grownup = rtrees(r,2); int avail_young = rtrees(r,1); - int avail = avail_grownup + avail_young; int wcount; - assert(norders <= avail); + assert(norders <= avail_grownup + avail_young); if(norders <= avail_grownup) { rsettrees(r, 2, avail_grownup-norders); diff --git a/src/common/kernel/reports.c b/src/common/kernel/reports.c index 8a14ccbd9..4b68d4d85 100644 --- a/src/common/kernel/reports.c +++ b/src/common/kernel/reports.c @@ -887,6 +887,7 @@ get_addresses(const faction * f, const seen_region * seenregions) } #ifdef ALLIANCES if(f->alliance != NULL) { + faction * f2; for(f2 = factions; f2; f2 = f2->next) { if(f2->alliance != NULL && f2->alliance == f->alliance) { faction_list ** fnew = &flist; diff --git a/src/common/kernel/save.c b/src/common/kernel/save.c index 6959ee478..97a5275f7 100644 --- a/src/common/kernel/save.c +++ b/src/common/kernel/save.c @@ -1524,6 +1524,7 @@ readunit(FILE * F) } else { rs(F, buf); if (strcmp(buf, "giant turtle")==0) strcpy(buf, "giantturtle"); + if (strcmp(buf, "elf")==0) strcpy(buf, "demon"); u->race = rc_find(buf); assert(u->race); rs(F, buf); diff --git a/src/common/kernel/skill.c b/src/common/kernel/skill.c index e6b5c9635..6aa6d03ff 100644 --- a/src/common/kernel/skill.c +++ b/src/common/kernel/skill.c @@ -278,26 +278,29 @@ skill_weeks(int level) } void -reduce_skill(unit *u, skill * sv, int weeks) +reduce_skill(unit * u, skill * sv, unsigned int weeks) { - boolean reroll = false; + int reroll = false; while (sv->level>0 && weeks>sv->level) { weeks -= sv->level; --sv->level; } if (sv->level*2+1weeks) reroll = true; if (sv->level>0) { - if (rand()%sv->level < weeks) { + sv->weeks+=weeks; + while (sv->level!=0 && sv->weeks>sv->level) { + weeks = sv->weeks-sv->level; --sv->level; - reroll = true; + sv->weeks = weeks; } - } else { - reroll = true; } - if (reroll) sv->weeks = (unsigned char)skill_weeks(sv->level); - assert(sv->weeks<=sv->level*2+1); + if (sv->level==0) { + /* reroll */ + sv->weeks = (unsigned char)skill_weeks(sv->level); + } } + int skill_compare(const skill * sk, const skill * sc) { diff --git a/src/common/kernel/skill.h b/src/common/kernel/skill.h index 3fcc03f71..f23a08203 100644 --- a/src/common/kernel/skill.h +++ b/src/common/kernel/skill.h @@ -24,9 +24,9 @@ extern signed char skill_bonus(struct unit * u, struct region * r); typedef struct skill { unsigned char id; - unsigned char level; - unsigned char weeks; - unsigned char old; + unsigned int level : 8; + unsigned int weeks : 8; + unsigned int old : 8; } skill; typedef struct skillmod_data { @@ -50,7 +50,7 @@ extern int level_days(int level); extern int level(int days); #define skill_level(level) (level) -extern void reduce_skill(struct unit *u, skill * sv, int change); +extern void reduce_skill(struct unit *u, skill * sv, unsigned int change); extern int skill_weeks(int level); extern int skill_compare(const skill * sk, const skill * sc); diff --git a/src/common/modules/gmcmd.c b/src/common/modules/gmcmd.c index 93e353d60..b13a16889 100644 --- a/src/common/modules/gmcmd.c +++ b/src/common/modules/gmcmd.c @@ -109,7 +109,9 @@ read_gmcreate(attrib * a, FILE * F) const item_type ** p_itype = (const item_type **)&a->data.v; fscanf(F, "%s", zText); *p_itype = it_find(zText); - assert(*p_itype); + if (a->data.v==NULL) { + log_error(("unknown itemtype %s in gmcreate attribute\n", zText)); + } return AT_READ_OK; }