From 79d0f255e2be9b22cbac847be41a7fbab540cc35 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Thu, 28 Aug 2008 13:23:24 +0000 Subject: [PATCH] improve some output, remove some error messages. --- src/common/attributes/reduceproduction.c | 10 +- src/common/gamecode/economy.h | 2 - src/common/gamecode/give.c | 2 +- src/common/gamecode/randenc.c | 113 ++++++++++------------- src/common/gamecode/report.c | 1 + src/common/kernel/save.c | 1 + src/common/kernel/terrain.c | 2 +- src/common/spells/spells.c | 56 +++++------ 8 files changed, 84 insertions(+), 103 deletions(-) diff --git a/src/common/attributes/reduceproduction.c b/src/common/attributes/reduceproduction.c index 867ae1b2c..38d64948d 100644 --- a/src/common/attributes/reduceproduction.c +++ b/src/common/attributes/reduceproduction.c @@ -40,12 +40,10 @@ attrib_type at_reduceproduction = { attrib * make_reduceproduction(int percent, int time) { - attrib * a = a_new(&at_reduceproduction); - int reduce = 100 - (5 * time); - if (reduce < 10) reduce = 10; - a->data.sa[0] = (short)reduce; - a->data.sa[1] = (short)time; - return a; + attrib * a = a_new(&at_reduceproduction); + a->data.sa[0] = (short)percent; + a->data.sa[1] = (short)time; + return a; } void diff --git a/src/common/gamecode/economy.h b/src/common/gamecode/economy.h index 1a1e2f49c..bba522715 100644 --- a/src/common/gamecode/economy.h +++ b/src/common/gamecode/economy.h @@ -40,8 +40,6 @@ extern "C" { #define TRADE_FRACTION 100 -extern struct attrib_type at_reduceproduction; - extern int income(const struct unit * u); /* Wieviel Fremde eine Partei pro Woche aufnehmen kann */ diff --git a/src/common/gamecode/give.c b/src/common/gamecode/give.c index a474d04e6..c965bd03e 100644 --- a/src/common/gamecode/give.c +++ b/src/common/gamecode/give.c @@ -171,7 +171,7 @@ give_men(int n, unit * u, unit * u2, struct order * ord) /* werewolves can't be given to non-werewolves and vice-versa */ error = 312; } else if (u2 && u2->number!=0 && u2->race != u->race) { - log_warning(("faction %s attempts to give %s to faction %s.\n", + log_warning(("faction %s attempts to give %s to %s.\n", itoa36(u->faction->no), u->race->_name[0], u2->race->_name[1])); error = 139; diff --git a/src/common/gamecode/randenc.c b/src/common/gamecode/randenc.c index 3f4f15f4d..b0084db19 100644 --- a/src/common/gamecode/randenc.c +++ b/src/common/gamecode/randenc.c @@ -53,6 +53,7 @@ /* attributes includes */ #include +#include /* util includes */ #include @@ -668,47 +669,38 @@ rrandneighbour(region *r) return rc; } -void -volcano_outbreak(region *r) +static void +volcano_destruction(region * volcano, region * r, region * rn, const char * damage) { - attrib *a; - region *rn; - unit *u, **up; - faction *f; - - for (f=NULL,u=r->units; u; u=u->next) { - if (f!=u->faction) { - f = u->faction; - freset(f, FFL_SELECT); - } - } - rn = rrandneighbour(r); - - /* Vulkan-Region verwüsten */ + attrib * a; + unit ** up; + int percent = 25, time = 6 + rng_int()%12; rsettrees(r, 2, 0); rsettrees(r, 1, 0); rsettrees(r, 0, 0); a = a_find(r->attribs, &at_reduceproduction); - if (!a) a = a_add(&r->attribs, a_new(&at_reduceproduction)); - - /* Produktion vierteln ... */ - a->data.sa[0] = 25; - /* Für 6-17 Runden */ - a->data.sa[1] = (short)(a->data.sa[1] + 6 + rng_int()%12); + if (!a) { + a = make_reduceproduction(percent, time); + } else { + /* Produktion vierteln ... */ + a->data.sa[0] = (short)percent; + /* Für 6-17 Runden */ + a->data.sa[1] = (short)(a->data.sa[1] + time); + } /* Personen bekommen 4W10 Punkte Schaden. */ for (up=&r->units; *up;) { unit * u = *up; if (u->number) { - int dead = damage_unit(u, "4d10", true, false); + int dead = damage_unit(u, damage, true, false); if (dead) { ADDMSG(&u->faction->msgs, msg_message("volcano_dead", - "unit region dead", u, r, dead)); + "unit region dead", u, volcano, dead)); } - if (!fval(u->faction, FFL_SELECT)) { + if (r==volcano && !fval(u->faction, FFL_SELECT)) { fset(u->faction, FFL_SELECT); if (rn) { ADDMSG(&u->faction->msgs, msg_message("volcanooutbreak", @@ -723,36 +715,28 @@ volcano_outbreak(region *r) } remove_empty_units_in_region(r); +} + +void +volcano_outbreak(region *r) +{ + region *rn; + unit *u; + faction *f; + + for (f=NULL,u=r->units; u; u=u->next) { + if (f!=u->faction) { + f = u->faction; + freset(f, FFL_SELECT); + } + } /* Zufällige Nachbarregion verwüsten */ + rn = rrandneighbour(r); + volcano_destruction(r, r, rn, "4d10"); if (rn) { - - rsettrees(r, 2, 0); - rsettrees(r, 1, 0); - rsettrees(r, 0, 0); - - a = a_find(rn->attribs, &at_reduceproduction); - if (!a) a = a_add(&rn->attribs, a_new(&at_reduceproduction)); - - /* Produktion vierteln ... */ - a->data.sa[0] = 25; - /* Für 6-17 Runden */ - a->data.sa[1] = (short)(a->data.sa[1] + 6 + rng_int()%12); - - /* Personen bekommen 3W10 Punkte Schaden. */ - for (up=&rn->units; *up;) { - unit * u = *up; - if (u->number) { - int dead = damage_unit(u, "3d10", true, false); - if (dead) { - ADDMSG(&u->faction->msgs, msg_message("volcano_dead", - "unit region dead", u, r, dead)); - } - } - if (u==*up) up=&u->next; - } - remove_empty_units_in_region(rn); + volcano_destruction(r, rn, NULL, "3d10"); } } @@ -1216,24 +1200,23 @@ randomevents(void) /* Vulkane qualmen, brechen aus ... */ for (r = regions; r; r = r->next) { - if (r->terrain == newterrain(T_VOLCANO_SMOKING) && a_find(r->attribs, &at_reduceproduction)) { - ADDMSG(&r->msgs, msg_message("volcanostopsmoke", "region", r)); - rsetterrain(r, T_VOLCANO); - } else switch(rterrain(r)) { - case T_VOLCANO: + if (r->terrain == newterrain(T_VOLCANO_SMOKING)) { + if (a_find(r->attribs, &at_reduceproduction)) { + ADDMSG(&r->msgs, msg_message("volcanostopsmoke", "region", r)); + rsetterrain(r, T_VOLCANO); + } else { + if (rng_int()%100 < 12) { + ADDMSG(&r->msgs, msg_message("volcanostopsmoke", "region", r)); + rsetterrain(r, T_VOLCANO); + } else if (rng_int()%100 < 8) { + volcano_outbreak(r); + } + } + } else if (r->terrain == newterrain(T_VOLCANO)) { if (rng_int()%100 < 4) { ADDMSG(&r->msgs, msg_message("volcanostartsmoke", "region", r)); rsetterrain(r, T_VOLCANO_SMOKING); } - break; - case T_VOLCANO_SMOKING: - if (rng_int()%100 < 12) { - ADDMSG(&r->msgs, msg_message("volcanostopsmoke", "region", r)); - rsetterrain(r, T_VOLCANO); - } else if (rng_int()%100 < 8) { - volcano_outbreak(r); - } - break; } } diff --git a/src/common/gamecode/report.c b/src/common/gamecode/report.c index 988008080..f6631a08f 100644 --- a/src/common/gamecode/report.c +++ b/src/common/gamecode/report.c @@ -25,6 +25,7 @@ #include #include #include +#include #ifdef AT_OPTION # include #endif diff --git a/src/common/kernel/save.c b/src/common/kernel/save.c index 2365462f8..d047d4470 100644 --- a/src/common/kernel/save.c +++ b/src/common/kernel/save.c @@ -1353,6 +1353,7 @@ readgame(const char * filename, int mode, int backup) } a_read(store, &global.attribs); global.data_turn = turn = store->r_int(store); + log_info((1, " - reading turn %d\n", turn)); rng_init(turn); ++global.cookie; store->r_int(store); /* max_unique_id = */ diff --git a/src/common/kernel/terrain.c b/src/common/kernel/terrain.c index 32ce66d3b..a2a1b642b 100644 --- a/src/common/kernel/terrain.c +++ b/src/common/kernel/terrain.c @@ -117,7 +117,7 @@ oldterrain(const struct terrain_type * terrain) for (t=0;t!=MAXTERRAINS;++t) { if (newterrains[t]==terrain) return t; } - log_warning(("%s is not a classic terrain", terrain->_name)); + log_warning(("%s is not a classic terrain.\n", terrain->_name)); return NOTERRAIN; } diff --git a/src/common/spells/spells.c b/src/common/spells/spells.c index 87f1c0efd..b1cef165b 100644 --- a/src/common/spells/spells.c +++ b/src/common/spells/spells.c @@ -3096,34 +3096,6 @@ sp_unholypower(castorder *co) return cast_level; } -/* ------------------------------------------------------------- */ -/* Name: Todeswolke - * Stufe: 11 - * Gebiet: Draig - * Kategorie: Region, negativ - * - * Wirkung: - * Personen in der Region verlieren stufe/2 Trefferpunkte pro Runde. - * Dauer force/2 - * Wirkt gegen MR - * Rüstung wirkt nicht - * Patzer: - * Magier gerät in den Staub und verliert zufällige Zahl von HP bis - * auf MAX(hp,2) - * Besonderheiten: - * Nicht als curse implementiert, was schlecht ist - man kann dadurch - * kein dispell machen. Wegen fix unter Zeitdruck erstmal nicht zu - * ändern... - * Missbrauchsmöglichkeit: - * Hat der Magier mehr HP als Rasse des Feindes (extrem: Dämon/Goblin) - * so kann er per Farcasting durch mehrmaliges Zaubern eine - * Nachbarregion auslöschen. Darum sollte dieser Spruch nur einmal auf - * eine Region gelegt werden können. - * - * Flag: - * (FARCASTING | REGIONSPELL | TESTRESISTANCE) - */ - static int dc_age(struct curse * c) /* age returns 0 if the attribute needs to be removed, !=0 otherwise */ @@ -3215,6 +3187,34 @@ attrib_type at_deathcloud_compat = { }; #endif +/* ------------------------------------------------------------- */ +/* Name: Todeswolke +* Stufe: 11 +* Gebiet: Draig +* Kategorie: Region, negativ +* +* Wirkung: +* Personen in der Region verlieren stufe/2 Trefferpunkte pro Runde. +* Dauer force/2 +* Wirkt gegen MR +* Rüstung wirkt nicht +* Patzer: +* Magier gerät in den Staub und verliert zufällige Zahl von HP bis +* auf MAX(hp,2) +* Besonderheiten: +* Nicht als curse implementiert, was schlecht ist - man kann dadurch +* kein dispell machen. Wegen fix unter Zeitdruck erstmal nicht zu +* ändern... +* Missbrauchsmöglichkeit: +* Hat der Magier mehr HP als Rasse des Feindes (extrem: Dämon/Goblin) +* so kann er per Farcasting durch mehrmaliges Zaubern eine +* Nachbarregion auslöschen. Darum sollte dieser Spruch nur einmal auf +* eine Region gelegt werden können. +* +* Flag: +* (FARCASTING | REGIONSPELL | TESTRESISTANCE) +*/ + static int sp_deathcloud(castorder *co) {