diff --git a/src/kernel/config.c b/src/kernel/config.c index ee8a2638c..699044520 100644 --- a/src/kernel/config.c +++ b/src/kernel/config.c @@ -530,7 +530,9 @@ int alliedunit(const unit * u, const faction * f2, int mode) ally *sf; int automode; - assert(u && u->region); /* the unit should be in a region, but it's possible that u->number==0 (TEMP units) */ + assert(u); + assert(f2); + assert(u->region); /* the unit should be in a region, but it's possible that u->number==0 (TEMP units) */ if (u->faction == f2) return mode; if (u->faction != NULL && f2 != NULL) { diff --git a/src/kernel/save.c b/src/kernel/save.c index d997c3216..fba9b6083 100644 --- a/src/kernel/save.c +++ b/src/kernel/save.c @@ -233,7 +233,7 @@ static faction *factionorders(void) f->no, pass)); return 0; } - /* Die Partei hat sich zumindest gemeldet, so daß sie noch + /* Die Partei hat sich zumindest gemeldet, so dass sie noch * nicht als untätig gilt */ /* TODO: +1 ist ein Workaround, weil cturn erst in process_orders @@ -309,8 +309,8 @@ int readorders(const char *filename) * Partei, eine neue Einheit oder das File-Ende. Das switch() wird erneut * durchlaufen, und die entsprechende Funktion aufgerufen. Man darf buf * auf alle Fälle nicht überschreiben! Bei allen anderen Einträgen hier - * muß buf erneut gefüllt werden, da die betreffende Information in nur - * einer Zeile steht, und nun die nächste gelesen werden muß. */ + * muss buf erneut gefüllt werden, da die betreffende Information in nur + * einer Zeile steht, und nun die nächste gelesen werden muss. */ case P_NEXT: f = NULL; @@ -1603,7 +1603,6 @@ int readgame(const char *filename, bool backup) while (--p >= 0) { unit *u = read_unit(&gdata); - sc_mage *mage; if (gdata.version < JSON_REPORT_VERSION) { if (u->_name && fval(u->faction, FFL_NPC)) { @@ -1618,21 +1617,6 @@ int readgame(const char *filename, bool backup) up = &u->next; update_interval(u->faction, u->region); - mage = get_mage(u); - if (mage) { - faction *f = u->faction; - int skl = effskill(u, SK_MAGIC); - if (!fval(f, FFL_NPC) && f->magiegebiet == M_GRAY) { - log_error("faction %s had magic=gray, fixing (%s)\n", factionname(f), magic_school[mage->magietyp]); - f->magiegebiet = mage->magietyp; - } - if (f->max_spelllevel < skl) { - f->max_spelllevel = skl; - } - if (mage->spellcount < 0) { - mage->spellcount = 0; - } - } } } log_printf(stdout, "\n"); @@ -1656,6 +1640,7 @@ int readgame(const char *filename, bool backup) for (f = factions; f; f = f->next) { if (f->flags & FFL_NPC) { f->alive = 1; + f->magiegebiet = M_GRAY; if (f->no == 0) { int no = 666; while (findfaction(no)) @@ -1666,8 +1651,23 @@ int readgame(const char *filename, bool backup) } else { for (u = f->units; u; u = u->nextF) { + sc_mage *mage = get_mage(u); + if (mage) { + faction *f = u->faction; + int skl = effskill(u, SK_MAGIC); + if (f->magiegebiet == M_GRAY) { + log_error("faction %s had magic=gray, fixing (%s)\n", factionname(f), magic_school[mage->magietyp]); + f->magiegebiet = mage->magietyp; + } + if (f->max_spelllevel < skl) { + f->max_spelllevel = skl; + } + if (mage->spellcount < 0) { + mage->spellcount = 0; + } + } if (u->number > 0) { - f->alive = 1; + f->alive = true; break; } } diff --git a/src/kernel/unit.c b/src/kernel/unit.c index a43ae2153..85e558fd2 100644 --- a/src/kernel/unit.c +++ b/src/kernel/unit.c @@ -1274,25 +1274,10 @@ static int item_modification(const unit * u, skill_t sk, int val) return val; } -static int update_gbdream(const unit * u, int bonus, curse *c, const curse_type *gbdream_ct, int sign){ - if (curse_active(c) && c->type == gbdream_ct) { - double effect = curse_geteffect(c); - unit *mage = c->magician; - /* wir suchen jeweils den groessten Bonus und den groestsen Malus */ - if (sign * effect > sign * bonus) { - if (mage == NULL || mage->number == 0 - || (sign>0?alliedunit(mage, u->faction, HELP_GUARD):!alliedunit(mage, u->faction, HELP_GUARD))) { - bonus = (int)effect; - } - } - } - return bonus; -} - -int att_modification(const unit * u, skill_t sk) +static int att_modification(const unit * u, skill_t sk) { double result = 0; - static bool init = false; + static bool init = false; // TODO: static variables are bad global state static const curse_type *skillmod_ct, *gbdream_ct, *worse_ct; curse *c; @@ -1321,15 +1306,21 @@ int att_modification(const unit * u, skill_t sk) /* TODO hier kann nicht mit get/iscursed gearbeitet werden, da nur der * jeweils erste vom Typ C_GBDREAM zurueckgegen wird, wir aber alle * durchsuchen und aufaddieren muessen */ - if (u->region) { + if (gbdream_ct && u->region) { int bonus = 0, malus = 0; attrib *a = a_find(u->region->attribs, &at_curse); while (a && a->type == &at_curse) { curse *c = (curse *)a->data.v; - bonus = update_gbdream(u, bonus, c, gbdream_ct, 1); - malus = update_gbdream(u, malus, c, gbdream_ct, -1); - + if (curse_active(c) && c->type == gbdream_ct) { + int effect = curse_geteffect_int(c); + bool allied = alliedunit(c->magician, u->faction, HELP_GUARD); + if (allied) { + if (effect > bonus) bonus = effect; + } else { + if (effect < malus) malus = effect; + } + } a = a->next; } result = result + bonus + malus; diff --git a/src/laws.c b/src/laws.c index 6a18dc84e..76658a2e3 100755 --- a/src/laws.c +++ b/src/laws.c @@ -183,7 +183,7 @@ static void live(region * r) reduce_skill(u, sb, weeks); ADDMSG(&u->faction->msgs, msg_message("dumbeffect", "unit weeks skill", u, weeks, (skill_t)sb->id)); - } /* sonst Glück gehabt: wer nix weiß, kann nix vergessen... */ + } /* sonst Glück gehabt: wer nix weiss, kann nix vergessen... */ change_effect(u, oldpotiontype[P_FOOL], -effect); } age_unit(r, u); @@ -402,7 +402,7 @@ static void migrate(region * r) * wer fragt das? Die Baumwanderung war abhängig von der * Auswertungsreihenfolge der regionen, * das hatte ich geändert. jemand hat es wieder gelöscht, toll. - * ich habe es wieder aktiviert, muß getestet werden. + * ich habe es wieder aktiviert, muss getestet werden. */ *hp = m->next; m->next = free_migrants; @@ -442,7 +442,7 @@ static void horses(region * r) /* Pferde wandern in Nachbarregionen. * Falls die Nachbarregion noch berechnet - * werden muß, wird eine migration-Struktur gebildet, + * werden muss, wird eine migration-Struktur gebildet, * die dann erst in die Berechnung der Nachbarstruktur einfließt. */ @@ -632,7 +632,7 @@ growing_trees(region * r, const int current_season, const int last_weeks_season) a->data.sa[0] = (short)rtrees(r, 0); a->data.sa[1] = (short)rtrees(r, 1); } - /* wir haben 6 Wochen zum wachsen, jeder Same/Sproß hat 18% Chance + /* wir haben 6 Wochen zum wachsen, jeder Same/Spross hat 18% Chance * zu wachsen, damit sollten nach 5-6 Wochen alle gewachsen sein */ growth = 1800; @@ -1990,7 +1990,7 @@ int mail_cmd(unit * u, struct order *ord) s = gettoken(token, sizeof(token)); /* Falls kein Parameter, ist das eine Einheitsnummer; - * das Füllwort "AN" muß wegfallen, da gültige Nummer! */ + * das Füllwort "AN" muss wegfallen, da gültige Nummer! */ do { cont = 0; @@ -3495,11 +3495,11 @@ void update_long_order(unit * u) switch (keyword) { /* Wenn gehandelt wird, darf kein langer Befehl ausgeführt * werden. Da Handel erst nach anderen langen Befehlen kommt, - * muß das vorher abgefangen werden. Wir merken uns also + * muss das vorher abgefangen werden. Wir merken uns also * hier, ob die Einheit handelt. */ case K_BUY: case K_SELL: - /* Wenn die Einheit handelt, muß der Default-Befehl gelöscht + /* Wenn die Einheit handelt, muss der Default-Befehl gelöscht * werden. * Wird je diese Ausschliesslichkeit aufgehoben, muss man aufpassen * mit der Reihenfolge von Kaufen, Verkaufen etc., damit es Spielern @@ -3522,7 +3522,7 @@ void update_long_order(unit * u) if (hunger) { return; } - /* Wenn die Einheit handelt, muß der Default-Befehl gelöscht + /* Wenn die Einheit handelt, muss der Default-Befehl gelöscht * werden. */ if (trade) { diff --git a/src/move.c b/src/move.c index f29dd08ce..a9ed36b3e 100644 --- a/src/move.c +++ b/src/move.c @@ -366,7 +366,7 @@ static int canwalk(unit * u) return E_CANWALK_TOOMANYCARTS; /* Es muß nicht zwingend an den Wagen liegen, aber egal... (man * könnte z.B. auch 8 Eisen abladen, damit ein weiterer Wagen als - * Fracht draufpaßt) */ + * Fracht draufpasst) */ return E_CANWALK_TOOHEAVY; } diff --git a/src/spells.test.c b/src/spells.test.c index ff67dd58d..5ecb8bd88 100644 --- a/src/spells.test.c +++ b/src/spells.test.c @@ -20,13 +20,10 @@ #include -static struct castorder *test_create_castorder(castorder *order, unit *u, const char *name, int level, float force, int range) { +static void test_create_castorder(castorder *order, unit *u, int level, float force, int range) { struct locale * lang; - spell *sp; - lang = get_or_create_locale("en"); - sp = create_spell(name, 0); - return order = create_castorder(order, u, NULL, sp, u->region, level, force, range, create_order(K_CAST, lang, ""), NULL); + create_castorder(order, u, NULL, NULL, u->region, level, force, range, create_order(K_CAST, lang, ""), NULL); } static void test_dreams(CuTest *tc) { @@ -39,12 +36,12 @@ static void test_dreams(CuTest *tc) { test_cleanup(); test_create_world(); r=findregion(0, 0); - f1 = test_create_faction(test_create_race("human")); - f2 = test_create_faction(test_create_race("human")); + f1 = test_create_faction(0); + f2 = test_create_faction(0); u1 = test_create_unit(f1, r); u2 = test_create_unit(f2, r); - test_create_castorder(&order, u1, "goodreams", 10, 10., 0); + test_create_castorder(&order, u1, 10, 10., 0); level = sp_gooddreams(&order); CuAssertIntEquals(tc, 10, level); @@ -57,7 +54,7 @@ static void test_dreams(CuTest *tc) { CuAssertIntEquals(tc, 1, get_modifier(u1, SK_MELEE, 11, r, false)); CuAssertIntEquals(tc, 0, get_modifier(u2, SK_MELEE, 11, r, false)); - test_create_castorder(&order, u1, "baddreams", 10, 10., 0); + test_create_castorder(&order, u1, 10, 10., 0); level = sp_baddreams(&order); CuAssertIntEquals(tc, 10, level);