diff --git a/process/send-zip-report b/process/send-zip-report index 7926de8f7..6ea2ea8e7 100755 --- a/process/send-zip-report +++ b/process/send-zip-report @@ -27,7 +27,7 @@ fi if [ -e $GAME/$TEMPLATE ]; then TEMPLATE=$GAME/$TEMPLATE else -TEMPLATE=$ERESSEA/etc/$TEMPLATE +TEMPLATE=$ERESSEA/server/etc/$TEMPLATE fi if [ ! -e $TEMPLATE ]; then diff --git a/res/core/messages.xml b/res/core/messages.xml index a500a41ac..9b06b3f48 100644 --- a/res/core/messages.xml +++ b/res/core/messages.xml @@ -7154,7 +7154,7 @@ "Das Wurmloch in $region($region) schließt sich." "The wormhole in $region($region) disappears." - + @@ -7162,7 +7162,7 @@ "$int($amount) Krieger von $unit($unit) benutzen ihre Flammenschwerter." "$int($amount) fighters of $unit($unit) are using their flaming sword." - + @@ -7170,35 +7170,35 @@ "$int($amount) Krieger von $unit($unit) feuern ihre Katapulte ab." "$int($amount) fighters of $unit($unit) launch their catapults." - + "Der Kampf wurde ausgelöst von ${factions}." "The battle was initiated by ${factions}." - + "Eine Person von $unit($unit) konnte durch einen Heiltrank überleben." "A fighter of $unit($unit) was saved by a healing potion." - + "$unit($unit) konnte dem Gegner eine Falle stellen." "$unit($unit) lured the enemy into an ambush." - + "$unit($unit) überrascht den Gegner." "$unit($unit) surprises the enemies." - + @@ -7206,20 +7206,20 @@ "$unit($unit) versucht $spell($spell) zu zaubern, doch der Zauber schlägt fehl!" "$unit($unit) tries to cast $spell($spell), but the spell fails!" - + "Der Kampf wurde abgebrochen, da alle Verteidiger flohen." "The battle was aborted because all enemies escaped." - + "... in der $int($row). Kampflinie:" "... in combat rank $int($row):" - + @@ -7228,14 +7228,14 @@ "$unit($mage) casts $spell($spell), but nobody was in range." - + "Einheiten nach dem Kampf:" "Units after the battle:" - + "" @@ -7301,21 +7301,21 @@ "$unit($mage) causes the walls of $building($building) to glow in an eerie magic light." - + "Einheiten vor der $int($turn). Runde:" "Units before turn $int($turn):" - + "In $region($region) findet ein Kampf statt." "There is a battle in $region($region)." - + @@ -7516,7 +7516,7 @@ "$unit($mage) casts $spell($spell). $int($amount) fighters are temporarily losing some of their memories." - + @@ -7524,7 +7524,7 @@ "$unit($unit) tötete $int($dead) Krieger." "$unit($unit) killed $int($dead) opponents." - + diff --git a/src/battle.c b/src/battle.c index 79e3c7a32..4451198e5 100644 --- a/src/battle.c +++ b/src/battle.c @@ -1295,7 +1295,7 @@ terminate(troop dt, troop at, int type, const char *damage, bool missile) if (oldpotiontype[P_HEAL] && !fval(&df->person[dt.index], FL_HEALING_USED)) { if (i_get(du->items, oldpotiontype[P_HEAL]->itype) > 0) { - message *m = msg_message("battle::potionsave", "unit", du); + message *m = msg_message("potionsave", "unit", du); message_faction(b, du->faction, m); msg_release(m); i_change(&du->items, oldpotiontype[P_HEAL]->itype, -1); @@ -1630,7 +1630,7 @@ selist *fighters(battle * b, const side * vs, int minrow, int maxrow, int mask) static void report_failed_spell(struct battle * b, struct unit * mage, const struct spell *sp) { - message *m = msg_message("battle::spell_failed", "unit spell", mage, sp); + message *m = msg_message("spell_failed", "unit spell", mage, sp); message_all(b, m); msg_release(m); } @@ -2277,7 +2277,7 @@ void do_attack(fighter * af) * Ladezeit neu und generiert die Meldung. */ if (af->catmsg >= 0) { struct message *m = - msg_message("battle::killed", "unit dead", au, af->catmsg); + msg_message("killed_battle", "unit dead", au, af->catmsg); message_all(b, m); msg_release(m); af->catmsg = -1; @@ -2752,10 +2752,10 @@ static void aftermath(battle * b) battle_effects(b, dead_players); for (s = b->sides; s != b->sides + b->nsides; ++s) { - message *seen = msg_message("battle::army_report", + message *seen = msg_message("army_report", "index abbrev dead fled survived", army_index(s), sideabkz(s, false), s->dead, s->flee, s->alive); - message *unseen = msg_message("battle::army_report", + message *unseen = msg_message("army_report", "index abbrev dead fled survived", army_index(s), "-?-", s->dead, s->flee, s->alive); @@ -2864,7 +2864,7 @@ static void print_fighters(battle * b, const side * s) if (row == thisrow) { if (m == NULL) { - m = msg_message("battle::row_header", "row", row); + m = msg_message("battle_row", "row", row); message_all(b, m); } battle_punit(du, b); @@ -2927,7 +2927,7 @@ static void print_header(battle * b) bufp = STRLCPY(bufp, lastf, size); } - m = msg_message("battle::starters", "factions", zText); + m = msg_message("start_battle", "factions", zText); message_faction(b, f, m); msg_release(m); } @@ -3049,10 +3049,10 @@ static void print_stats(battle * b) unit *u = tf->unit; message *m = NULL; if (!is_attacker(tf)) { - m = msg_message("battle::tactics_lost", "unit", u); + m = msg_message("tactics_lost", "unit", u); } else { - m = msg_message("battle::tactics_won", "unit", u); + m = msg_message("tactics_won", "unit", u); } message_all(b, m); msg_release(m); @@ -3579,9 +3579,9 @@ static int battle_report(battle * b) message_faction(b, fac, msg_separator); if (cont) - m = msg_message("battle::lineup", "turn", b->turn); + m = msg_message("lineup_battle", "turn", b->turn); else - m = msg_message("battle::after", ""); + m = msg_message("after_battle", ""); message_faction(b, fac, m); msg_release(m); @@ -3847,7 +3847,7 @@ static bool start_battle(region * r, battle ** bp) /* Beginn Fehlerbehandlung */ /* Fehler: "Die Einheit wurde nicht gefunden" */ - if (!u2 || u2->number == 0 || !cansee(u->faction, u->region, u2, 0, seen_battle)) { + if (!u2 || u2->number == 0 || !cansee(u->faction, u->region, u2, 0)) { ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "feedback_unit_not_found", "")); continue; @@ -4073,7 +4073,7 @@ void do_battle(region * r) bool fighting = false; ship *sh; if (msg_separator == NULL) { - msg_separator = msg_message("battle::section", ""); + msg_separator = msg_message("section_battle", ""); } fighting = start_battle(r, &b); @@ -4087,7 +4087,7 @@ void do_battle(region * r) print_header(b); if (!fighting) { /* Niemand mehr da, Kampf kann nicht stattfinden. */ - message *m = msg_message("battle::aborted", ""); + message *m = msg_message("aborted_battle", ""); message_all(b, m); msg_release(m); free_battle(b); diff --git a/src/creport.c b/src/creport.c index 74e32505c..12eca6367 100644 --- a/src/creport.c +++ b/src/creport.c @@ -1498,7 +1498,7 @@ static void cr_output_region(FILE * F, report_context * ctx, region * r) for (u = r->units; u; u = u->next) { if (u->building || u->ship || (stealthmod > INT_MIN - && cansee(f, r, u, stealthmod, r->seen.mode))) { + && cansee_ex(f, r, u, stealthmod, r->seen.mode))) { cr_output_unit_compat(F, r, f, u, r->seen.mode); } } diff --git a/src/economy.c b/src/economy.c index 54fccd005..1de4f7e4e 100644 --- a/src/economy.c +++ b/src/economy.c @@ -2454,7 +2454,7 @@ static void steal_cmd(unit * u, struct order *ord, request ** stealorders) } for (u2 = r->units; u2; u2 = u2->next) { - if (u2->faction == f && cansee_depr(u->faction, r, u2, 0)) + if (u2->faction == f && cansee(u->faction, r, u2, 0)) break; } diff --git a/src/give.c b/src/give.c index 6d9137522..84e2765a6 100644 --- a/src/give.c +++ b/src/give.c @@ -614,7 +614,7 @@ bool can_give_to(unit *u, unit *u2) { return false; } if (u2 && !alliedunit(u2, u->faction, HELP_GIVE) - && !cansee_depr(u->faction, u->region, u2, 0) && !ucontact(u2, u) + && !cansee(u->faction, u->region, u2, 0) && !ucontact(u2, u) && !fval(u2, UFL_TAKEALL)) { return false; } diff --git a/src/guard.c b/src/guard.c index 18281c7a0..118ede5fc 100644 --- a/src/guard.c +++ b/src/guard.c @@ -93,7 +93,7 @@ static bool is_guardian_u(const unit * guard, unit * u) return false; if (ucontact(guard, u)) return false; - if (!cansee_depr(guard->faction, u->region, u, 0)) + if (!cansee(guard->faction, u->region, u, 0)) return false; if (!(u_race(guard)->flags & RCF_FLY) && u_race(u)->flags & RCF_FLY) return false; diff --git a/src/items/weapons.c b/src/items/weapons.c index a23110a81..acb47f0e0 100644 --- a/src/items/weapons.c +++ b/src/items/weapons.c @@ -63,7 +63,7 @@ int *casualties) if (wp != NULL && wp->type == wtype) ++k; } - msg = msg_message("battle::useflamingsword", "amount unit", k, fi->unit); + msg = msg_message("useflamingsword", "amount unit", k, fi->unit); message_all(fi->side->battle, msg); msg_release(msg); fi->catmsg = 0; @@ -119,7 +119,7 @@ int *casualties) if (af->person[i].reload == 0 && af->person[i].missile == wp) ++k; } - msg = msg_message("battle::usecatapult", "amount unit", k, au); + msg = msg_message("usecatapult", "amount unit", k, au); message_all(b, msg); msg_release(msg); af->catmsg = 0; diff --git a/src/kernel/build.c b/src/kernel/build.c index 52228d4b9..2746fa406 100644 --- a/src/kernel/build.c +++ b/src/kernel/build.c @@ -113,7 +113,7 @@ static void destroy_road(unit * u, int nmax, struct order *ord) for (u2 = r->units; u2; u2 = u2->next) { if (u2->faction != u->faction && is_guard(u2) - && cansee_depr(u2->faction, u->region, u, 0) + && cansee(u2->faction, u->region, u, 0) && !alliedunit(u, u2->faction, HELP_GUARD)) { cmistake(u, ord, 70, MSG_EVENT); return; diff --git a/src/laws.c b/src/laws.c index 033dfbcd0..c98ffaaf6 100644 --- a/src/laws.c +++ b/src/laws.c @@ -1651,7 +1651,7 @@ static bool try_rename(unit *u, building *b, order *ord) { } if (owner) { - if (cansee(owner->faction, u->region, u, 0, seen_unit)) { + if (cansee(owner->faction, u->region, u, 0)) { ADDMSG(&owner->faction->msgs, msg_message("renamed_building_seen", "building renamer region", b, u, u->region)); @@ -1747,7 +1747,7 @@ int name_cmd(struct unit *u, struct order *ord) break; } } - if (cansee(f, r, u, 0, seen_unit)) { + if (cansee(f, r, u, 0)) { ADDMSG(&f->msgs, msg_message("renamed_faction_seen", "unit region", u, r)); } @@ -1794,7 +1794,7 @@ int name_cmd(struct unit *u, struct order *ord) } uo = ship_owner(sh); if (uo) { - if (cansee(uo->faction, r, u, 0, seen_unit)) { + if (cansee(uo->faction, r, u, 0)) { ADDMSG(&uo->faction->msgs, msg_message("renamed_ship_seen", "ship renamer region", sh, u, r)); } @@ -1823,7 +1823,7 @@ int name_cmd(struct unit *u, struct order *ord) unit *u2 = 0; getunit(r, u->faction, &u2); - if (!u2 || !cansee(u->faction, r, u2, 0, seen_unit)) { + if (!u2 || !cansee(u->faction, r, u2, 0)) { ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "feedback_unit_not_found", "")); break; @@ -1836,7 +1836,7 @@ int name_cmd(struct unit *u, struct order *ord) break; } } - if (cansee(u2->faction, r, u, 0, seen_unit)) { + if (cansee(u2->faction, r, u, 0)) { ADDMSG(&u2->faction->msgs, msg_message("renamed_seen", "renamer renamed region", u, u2, r)); } @@ -1898,7 +1898,7 @@ int name_cmd(struct unit *u, struct order *ord) void deliverMail(faction * f, region * r, unit * u, const char *s, unit * receiver) { - if (!cansee(f, r, u, 0, seen_unit)) { + if (!cansee(f, r, u, 0)) { u = NULL; } if (!receiver) { /* BOTSCHAFT an PARTEI */ @@ -1917,7 +1917,7 @@ mailunit(region * r, unit * u, int n, struct order *ord, const char *s) { unit *u2 = findunitr(r, n); - if (u2 && cansee(u->faction, r, u2, 0, seen_unit)) { + if (u2 && cansee(u->faction, r, u2, 0)) { deliverMail(u2->faction, r, u, s, u2); /* now done in prepare_mail_cmd */ } @@ -1995,7 +1995,7 @@ int mail_cmd(unit * u, struct order *ord) n = getid(); for (u2 = r->units; u2; u2 = u2->next) { - if (u2->no == n && cansee(u->faction, r, u2, 0, seen_unit)) { + if (u2->no == n && cansee(u->faction, r, u2, 0)) { break; } } @@ -2049,7 +2049,7 @@ int mail_cmd(unit * u, struct order *ord) for (u2 = r->units; u2; u2 = u2->next) { if (u2->building == b && !fval(u2->faction, FFL_SELECT) - && cansee(u->faction, r, u2, 0, seen_unit)) { + && cansee(u->faction, r, u2, 0)) { mailunit(r, u, u2->no, ord, s); fset(u2->faction, FFL_SELECT); } @@ -2078,7 +2078,7 @@ int mail_cmd(unit * u, struct order *ord) for (u2 = r->units; u2; u2 = u2->next) { if (u2->ship == sh && !fval(u2->faction, FFL_SELECT) - && cansee(u->faction, r, u2, 0, seen_unit)) { + && cansee(u->faction, r, u2, 0)) { mailunit(r, u, u2->no, ord, s); fset(u2->faction, FFL_SELECT); } @@ -4281,7 +4281,7 @@ void update_subscriptions(void) * Es muss auch niemand aus f in der region sein, wenn sie vom Turm * erblickt wird */ bool -cansee(const faction * f, const region * r, const unit * u, int modifier, seen_mode mode) +cansee(const faction * f, const region * r, const unit * u, int modifier) { int stealth, rings; @@ -4310,35 +4310,31 @@ cansee(const faction * f, const region * r, const unit * u, int modifier, seen_m rings = invisible(u, NULL); stealth = eff_stealth(u, r) - modifier; - if (mode > seen_unit) { - return (rings <= 0 && stealth <= 0); - } - else { - unit *u2; - for (u2 = r->units; u2; u2 = u2->next) { - if (u2->faction == f) { - if (rings < u->number || invisible(u, u2) < u->number) { - if (skill_enabled(SK_PERCEPTION)) { - int observation = effskill(u2, SK_PERCEPTION, 0); + unit *u2; + for (u2 = r->units; u2; u2 = u2->next) { + if (u2->faction == f) { + if (rings < u->number || invisible(u, u2) < u->number) { + if (skill_enabled(SK_PERCEPTION)) { + int observation = effskill(u2, SK_PERCEPTION, 0); - if (observation >= stealth) { - return true; - } - } - else { + if (observation >= stealth) { return true; } } + else { + return true; + } } } } - return false; + + return (rings <= 0 && stealth <= 0); } -bool -cansee_depr(const faction * f, const region * r, const unit * u, int modifier) +bool cansee_ex(const faction * f, const region * r, const unit * u, int modifier, seen_mode mode) { - return cansee(f, r, u, modifier, seen_unit); + UNUSED_ARG(mode); + return cansee(f, r, u, modifier); } bool cansee_unit(const unit * u, const unit * target, int modifier) @@ -4427,7 +4423,7 @@ bool seefaction(const faction * f, const region * r, const unit * u, int modifier) { if (((f == u->faction) || !fval(u, UFL_ANON_FACTION)) - && cansee(f, r, u, modifier, seen_unit)) + && cansee(f, r, u, modifier)) return true; return false; } diff --git a/src/laws.h b/src/laws.h index 32a5b4ef3..fe255485e 100755 --- a/src/laws.h +++ b/src/laws.h @@ -98,9 +98,9 @@ extern "C" { void nmr_warnings(void); + bool cansee_ex(const struct faction * f, const struct region * r, + const struct unit * u, int modifier, seen_mode mode); bool cansee(const struct faction * f, const struct region * r, - const struct unit *u, int modifier, seen_mode mode); - bool cansee_depr(const struct faction *f, const struct region *r, const struct unit *u, int modifier); bool cansee_durchgezogen(const struct faction *f, const struct region *r, const struct unit *u, int modifier); diff --git a/src/laws.test.c b/src/laws.test.c index 4881300b4..742eaa363 100644 --- a/src/laws.test.c +++ b/src/laws.test.c @@ -1579,76 +1579,6 @@ static void test_demon_hunger(CuTest * tc) test_cleanup(); } -static void test_cansee(CuTest *tc) { - unit *u, *u2; - - test_setup(); - u = test_create_unit(test_create_faction(0), test_create_region(0, 0, 0)); - u2 = test_create_unit(test_create_faction(0), u->region); - - CuAssertTrue(tc, cansee(u->faction, u->region, u2, 0, seen_unit)); - - set_level(u2, SK_STEALTH, 1); - CuAssertTrue(tc, !cansee(u->faction, u->region, u2, 0, seen_unit)); - - set_level(u, SK_PERCEPTION, 1); - CuAssertTrue(tc, cansee(u->faction, u->region, u2, 0, seen_unit)); - - test_cleanup(); -} - -static void test_cansee_spell(CuTest *tc) { - unit *u2; - faction *f; - - test_setup(); - f = test_create_faction(0); - u2 = test_create_unit(test_create_faction(0), test_create_region(0, 0, 0)); - - CuAssertTrue(tc, cansee(f, u2->region, u2, 0, seen_spell)); - CuAssertTrue(tc, cansee(f, u2->region, u2, 0, seen_battle)); - - set_level(u2, SK_STEALTH, 1); - CuAssertTrue(tc, !cansee(f, u2->region, u2, 0, seen_spell)); - CuAssertTrue(tc, cansee(f, u2->region, u2, 1, seen_spell)); - CuAssertTrue(tc, cansee(f, u2->region, u2, 1, seen_battle)); - - test_cleanup(); -} - -static void test_cansee_items(CuTest *tc) { - unit *u, *u2; - item_type *itype[3]; - - test_setup(); - u = test_create_unit(test_create_faction(0), test_create_region(0, 0, 0)); - u2 = test_create_unit(test_create_faction(0), u->region); - scale_number(u2, 2); - - itype[0] = test_create_itemtype("roi"); - itype[1] = test_create_itemtype("sphereofinv"); - itype[2] = test_create_itemtype("aots"); - CuAssertPtrNotNull(tc, get_resourcetype(R_RING_OF_INVISIBILITY)); - CuAssertPtrNotNull(tc, get_resourcetype(R_SPHERE_OF_INVISIBILITY)); - CuAssertPtrNotNull(tc, get_resourcetype(R_AMULET_OF_TRUE_SEEING)); - - CuAssertTrue(tc, cansee(u->faction, u->region, u2, 0, seen_unit)); - - i_change(&u2->items, itype[0], 1); - CuAssertTrue(tc, cansee(u->faction, u->region, u2, 0, seen_unit)); - CuAssertTrue(tc, !cansee(u->faction, u->region, u2, 0, seen_spell)); - - i_change(&u2->items, itype[0], 1); - CuAssertTrue(tc, !cansee(u->faction, u->region, u2, 0, seen_unit)); - CuAssertTrue(tc, !cansee(u->faction, u->region, u2, 0, seen_spell)); - - i_change(&u->items, itype[2], 1); - CuAssertTrue(tc, cansee(u->faction, u->region, u2, 0, seen_unit)); - CuAssertTrue(tc, !cansee(u->faction, u->region, u2, 0, seen_spell)); - - test_cleanup(); -} - static void test_armedmen(CuTest *tc) { /* TODO: test RCF_NOWEAPONS and SK_WEAPONLESS */ unit *u; @@ -1685,6 +1615,109 @@ static void test_armedmen(CuTest *tc) { test_cleanup(); } +static void test_cansee(CuTest *tc) { + unit *u, *u2; + + test_setup(); + u = test_create_unit(test_create_faction(0), test_create_region(0, 0, 0)); + u2 = test_create_unit(test_create_faction(0), u->region); + + CuAssertTrue(tc, cansee(u->faction, u->region, u2, 0)); + + set_level(u2, SK_STEALTH, 1); + CuAssertTrue(tc, !cansee(u->faction, u->region, u2, 0)); + + set_level(u, SK_PERCEPTION, 1); + CuAssertTrue(tc, cansee(u->faction, u->region, u2, 0)); + + test_cleanup(); +} + +static void test_cansee_spell(CuTest *tc) { + unit *u2; + faction *f; + + test_setup(); + f = test_create_faction(0); + u2 = test_create_unit(test_create_faction(0), test_create_region(0, 0, 0)); + + CuAssertTrue(tc, cansee_ex(f, u2->region, u2, 0, seen_spell)); + CuAssertTrue(tc, cansee_ex(f, u2->region, u2, 0, seen_battle)); + + set_level(u2, SK_STEALTH, 1); + CuAssertTrue(tc, !cansee_ex(f, u2->region, u2, 0, seen_spell)); + CuAssertTrue(tc, cansee_ex(f, u2->region, u2, 1, seen_spell)); + CuAssertTrue(tc, cansee_ex(f, u2->region, u2, 1, seen_battle)); + + test_cleanup(); +} + +static void test_cansee_ring(CuTest *tc) { + unit *u, *u2; + item_type *itype[2]; + + test_setup(); + u = test_create_unit(test_create_faction(0), test_create_region(0, 0, 0)); + u2 = test_create_unit(test_create_faction(0), u->region); + scale_number(u2, 2); + + itype[0] = test_create_itemtype("roi"); + itype[1] = test_create_itemtype("aots"); + CuAssertPtrNotNull(tc, get_resourcetype(R_RING_OF_INVISIBILITY)); + CuAssertPtrEquals(tc, itype[0]->rtype, (void *)get_resourcetype(R_RING_OF_INVISIBILITY)); + CuAssertPtrNotNull(tc, get_resourcetype(R_AMULET_OF_TRUE_SEEING)); + CuAssertPtrEquals(tc, itype[1]->rtype, (void *)get_resourcetype(R_AMULET_OF_TRUE_SEEING)); + + CuAssertTrue(tc, cansee(u->faction, u->region, u2, 0)); + + /* a single ring is not enough to hide two people */ + i_change(&u2->items, itype[0], 1); + CuAssertTrue(tc, cansee(u->faction, u->region, u2, 0)); + + /* two rings can hide two people */ + i_change(&u2->items, itype[0], 1); + CuAssertTrue(tc, !cansee(u->faction, u->region, u2, 0)); + + /* one amulet negates one of the two rings */ + i_change(&u->items, itype[1], 1); + CuAssertTrue(tc, cansee(u->faction, u->region, u2, 0)); + + test_cleanup(); +} + +static void test_cansee_sphere(CuTest *tc) { + unit *u, *u2; + item_type *itype[2]; + + test_setup(); + u = test_create_unit(test_create_faction(0), test_create_region(0, 0, 0)); + u2 = test_create_unit(test_create_faction(0), u->region); + + itype[0] = test_create_itemtype("sphereofinv"); + itype[1] = test_create_itemtype("aots"); + CuAssertPtrNotNull(tc, get_resourcetype(R_SPHERE_OF_INVISIBILITY)); + CuAssertPtrEquals(tc, itype[0]->rtype, (void *)get_resourcetype(R_SPHERE_OF_INVISIBILITY)); + CuAssertPtrNotNull(tc, get_resourcetype(R_AMULET_OF_TRUE_SEEING)); + CuAssertPtrEquals(tc, itype[1]->rtype, (void *)get_resourcetype(R_AMULET_OF_TRUE_SEEING)); + + CuAssertTrue(tc, cansee(u->faction, u->region, u2, 0)); + + /* a single sphere can hide 100 people */ + scale_number(u2, 100); + i_change(&u2->items, itype[0], 1); + CuAssertTrue(tc, !cansee(u->faction, u->region, u2, 0)); + + /* one single amulet negates it? */ + i_change(&u->items, itype[1], 1); + CuAssertTrue(tc, cansee(u->faction, u->region, u2, 0)); + + /* number of people inside the sphere does not matter? */ + scale_number(u2, 99); + CuAssertTrue(tc, cansee(u->faction, u->region, u2, 0)); + + test_cleanup(); +} + CuSuite *get_laws_suite(void) { CuSuite *suite = CuSuiteNew(); @@ -1754,8 +1787,9 @@ CuSuite *get_laws_suite(void) SUITE_ADD_TEST(suite, test_demon_hunger); SUITE_ADD_TEST(suite, test_armedmen); SUITE_ADD_TEST(suite, test_cansee); + SUITE_ADD_TEST(suite, test_cansee_ring); + SUITE_ADD_TEST(suite, test_cansee_sphere); SUITE_ADD_TEST(suite, test_cansee_spell); - SUITE_ADD_TEST(suite, test_cansee_items); return suite; } diff --git a/src/magic.c b/src/magic.c index 7e321a700..c8f1b83c3 100644 --- a/src/magic.c +++ b/src/magic.c @@ -1621,7 +1621,7 @@ order * ord) if (u->region != r) u = NULL; else if (sp->sptyp & TESTCANSEE) { - if (!cansee_depr(mage->faction, r, u, 0) && !ucontact(u, mage)) { + if (!cansee(mage->faction, r, u, 0) && !ucontact(u, mage)) { u = NULL; } } diff --git a/src/monsters.c b/src/monsters.c index 39186ae91..115759d29 100644 --- a/src/monsters.c +++ b/src/monsters.c @@ -159,7 +159,7 @@ static order *monster_attack(unit * u, const unit * target) { assert(u->region == target->region); assert(u->faction != target->faction); - if (!cansee_depr(u->faction, u->region, target, 0)) + if (!cansee(u->faction, u->region, target, 0)) return NULL; if (monster_is_waiting(u)) return NULL; @@ -199,7 +199,7 @@ int monster_attacks(unit * monster, bool rich_only) int money = 0; for (u2 = r->units; u2; u2 = u2->next) { - if (u2->faction != monster->faction && cansee_depr(monster->faction, r, u2, 0) && !in_safe_building(u2, monster)) { + if (u2->faction != monster->faction && cansee(monster->faction, r, u2, 0) && !in_safe_building(u2, monster)) { int m = get_money(u2); if (u_race(monster) == rc_serpent) { /* attack bigger ships only */ diff --git a/src/move.c b/src/move.c index f95728305..8df2dd23a 100644 --- a/src/move.c +++ b/src/move.c @@ -912,7 +912,7 @@ static void caught_target(region * r, unit * u) target, u)); } else if (!alliedunit(target, u->faction, HELP_ALL) - && cansee_depr(target->faction, r, u, 0)) { + && cansee(target->faction, r, u, 0)) { ADDMSG(&target->faction->msgs, msg_message("followdetect", "unit follower", target, u)); } @@ -1185,7 +1185,7 @@ static void init_transportation(void) continue; } if (!transport(ut, u)) { - if (cansee_depr(u->faction, r, ut, 0)) { + if (cansee(u->faction, r, ut, 0)) { cmistake(u, u->thisorder, 286, MSG_MOVE); } else { @@ -2093,7 +2093,7 @@ static const region_list *travel_i(unit * u, const region_list * route_begin, } } if (!found) { - if (cansee_depr(u->faction, u->region, ut, 0)) { + if (cansee(u->faction, u->region, ut, 0)) { cmistake(u, ord, 90, MSG_MOVE); } else { @@ -2604,7 +2604,7 @@ void follow_unit(unit * u) u2 = a->data.v; } - if (!u2 || (!followship && (u2->region != r || !cansee_depr(u->faction, r, u2, 0)))) { + if (!u2 || (!followship && (u2->region != r || !cansee(u->faction, r, u2, 0)))) { return; } diff --git a/src/report.c b/src/report.c index 3b2dd1d9f..16d340bb0 100644 --- a/src/report.c +++ b/src/report.c @@ -768,7 +768,7 @@ static void rp_battles(struct stream *out, faction * f) while (bm) { char buf[256]; - RENDER(f, buf, sizeof(buf), ("battle::header", "region", bm->r)); + RENDER(f, buf, sizeof(buf), ("header_battle", "region", bm->r)); newline(out); centre(out, buf, true); newline(out); @@ -2350,7 +2350,7 @@ report_plaintext(const char *filename, report_context * ctx, } while (u && !u->ship) { if (stealthmod > INT_MIN && r->seen.mode >= seen_unit) { - if (u->faction == f || cansee(f, r, u, stealthmod, r->seen.mode)) { + if (u->faction == f || cansee_ex(f, r, u, stealthmod, r->seen.mode)) { nr_unit(out, f, u, 4, r->seen.mode); } } diff --git a/src/reports.c b/src/reports.c index 265c2ab90..37d01f013 100644 --- a/src/reports.c +++ b/src/reports.c @@ -961,7 +961,7 @@ struct message *msg_curse(const struct curse *c, const void *obj, objtype_t typ, const struct unit *ucansee(const struct faction *f, const struct unit *u, const struct unit *x) { - if (cansee_depr(f, u->region, u, 0)) + if (cansee(f, u->region, u, 0)) return u; return x; } @@ -1070,7 +1070,7 @@ void get_addresses(report_context * ctx) faction *sf = visible_faction(ctx->f, u); if (lastf != sf) { if (u->building || u->ship || (stealthmod > INT_MIN - && cansee_depr(ctx->f, r, u, stealthmod))) { + && cansee(ctx->f, r, u, stealthmod))) { add_seen_faction_i(&flist, sf); lastf = sf; } @@ -1088,7 +1088,7 @@ void get_addresses(report_context * ctx) if (u->faction != ctx->f) { faction *sf = visible_faction(ctx->f, u); bool ballied = sf && sf != ctx->f && sf != lastf - && !fval(u, UFL_ANON_FACTION) && cansee_depr(ctx->f, r, u, stealthmod); + && !fval(u, UFL_ANON_FACTION) && cansee(ctx->f, r, u, stealthmod); if (ballied || is_allied(ctx->f, sf)) { add_seen_faction_i(&flist, sf); lastf = sf; diff --git a/src/spells.c b/src/spells.c index 2fc21ffff..c9e914904 100644 --- a/src/spells.c +++ b/src/spells.c @@ -362,11 +362,11 @@ int report_action(region * r, unit * actor, message * msg, int flags) if (view == ACTION_CANSEE) { /* Bei Fernzaubern sieht nur die eigene Partei den Magier */ show = show || (r == actor->region - && cansee_depr(u->faction, r, actor, 0)); + && cansee(u->faction, r, actor, 0)); } else if (view == ACTION_CANNOTSEE) { show = !show && !(r == actor->region - && cansee_depr(u->faction, r, actor, 0)); + && cansee(u->faction, r, actor, 0)); } else { /* the unliely (or lazy) case */ @@ -1328,7 +1328,7 @@ static int sp_rosthauch(castorder * co) "mage target amount", mage, u, ironweapon)); ADDMSG(&u->faction->msgs, msg_message("rust_effect", "mage target amount", - cansee_depr(u->faction, r, mage, 0) ? mage : NULL, u, ironweapon)); + cansee(u->faction, r, mage, 0) ? mage : NULL, u, ironweapon)); success += ironweapon; } else { @@ -1405,7 +1405,7 @@ static int sp_kaelteschutz(castorder * co) u)); if (u->faction != mage->faction) ADDMSG(&u->faction->msgs, msg_message("heat_effect", "mage target", - cansee_depr(u->faction, r, mage, 0) ? mage : NULL, u)); + cansee(u->faction, r, mage, 0) ? mage : NULL, u)); i = cast_level; } /* Erstattung? */ @@ -1825,7 +1825,7 @@ static int sp_treewalkenter(castorder * co) m = NULL; for (u2 = r->units; u2; u2 = u2->next) { if (!fval(u2->faction, FFL_SELECT)) { - if (cansee_depr(u2->faction, r, u, 0)) { + if (cansee(u2->faction, r, u, 0)) { fset(u2->faction, FFL_SELECT); if (!m) m = msg_message("astral_disappear", "unit", u); @@ -1842,7 +1842,7 @@ static int sp_treewalkenter(castorder * co) m = NULL; for (u2 = rt->units; u2; u2 = u2->next) { if (!fval(u2->faction, FFL_SELECT)) { - if (cansee_depr(u2->faction, rt, u, 0)) { + if (cansee(u2->faction, rt, u, 0)) { fset(u2->faction, FFL_SELECT); if (!m) m = msg_message("astral_appear", "unit", u); @@ -1971,7 +1971,7 @@ static int sp_treewalkexit(castorder * co) m = NULL; for (u2 = r->units; u2; u2 = u2->next) { if (!fval(u2->faction, FFL_SELECT)) { - if (cansee_depr(u2->faction, r, u, 0)) { + if (cansee(u2->faction, r, u, 0)) { fset(u2->faction, FFL_SELECT); if (!m) m = msg_message("astral_disappear", "unit", u); @@ -1989,7 +1989,7 @@ static int sp_treewalkexit(castorder * co) m = NULL; for (u2 = rt->units; u2; u2 = u2->next) { if (!fval(u2->faction, FFL_SELECT)) { - if (cansee_depr(u2->faction, rt, u, 0)) { + if (cansee(u2->faction, rt, u, 0)) { fset(u2->faction, FFL_SELECT); if (!m) m = msg_message("astral_appear", "unit", u); @@ -2954,7 +2954,7 @@ static int sp_deathcloud(castorder * co) if (!fval(u->faction, FFL_SELECT)) { fset(u->faction, FFL_SELECT); ADDMSG(&u->faction->msgs, msg_message("deathcloud_effect", - "mage region", cansee_depr(u->faction, r, mage, 0) ? mage : NULL, r)); + "mage region", cansee(u->faction, r, mage, 0) ? mage : NULL, r)); } } @@ -3848,7 +3848,7 @@ static int sp_song_of_peace(castorder * co) if (!fval(u->faction, FFL_SELECT)) { message *m = NULL; fset(u->faction, FFL_SELECT); - if (cansee_depr(u->faction, r, mage, 0)) { + if (cansee(u->faction, r, mage, 0)) { if (msg[0] == NULL) msg[0] = msg_message("song_of_peace_effect_0", "mage", mage); m = msg[0]; @@ -3905,7 +3905,7 @@ static int sp_generous(castorder * co) if (!fval(u->faction, FFL_SELECT)) { message *m = NULL; fset(u->faction, FFL_SELECT); - if (cansee_depr(u->faction, r, mage, 0)) { + if (cansee(u->faction, r, mage, 0)) { if (msg[0] == NULL) msg[0] = msg_message("generous_effect_0", "mage", mage); m = msg[0]; @@ -5040,7 +5040,7 @@ int sp_enterastral(castorder * co) m = NULL; for (u2 = r->units; u2; u2 = u2->next) { if (!fval(u2->faction, FFL_SELECT)) { - if (cansee_depr(u2->faction, r, u, 0)) { + if (cansee(u2->faction, r, u, 0)) { fset(u2->faction, FFL_SELECT); if (!m) m = msg_message("astral_disappear", "unit", u); @@ -5058,7 +5058,7 @@ int sp_enterastral(castorder * co) m = NULL; for (u2 = rt->units; u2; u2 = u2->next) { if (!fval(u2->faction, FFL_SELECT)) { - if (cansee_depr(u2->faction, rt, u, 0)) { + if (cansee(u2->faction, rt, u, 0)) { fset(u2->faction, FFL_SELECT); if (!m) m = msg_message("astral_appear", "unit", u); @@ -5184,7 +5184,7 @@ int sp_pullastral(castorder * co) m = NULL; for (u2 = r->units; u2; u2 = u2->next) { if (!fval(u2->faction, FFL_SELECT)) { - if (cansee_depr(u2->faction, r, u, 0)) { + if (cansee(u2->faction, r, u, 0)) { fset(u2->faction, FFL_SELECT); if (!m) m = msg_message("astral_disappear", "unit", u); @@ -5202,7 +5202,7 @@ int sp_pullastral(castorder * co) m = NULL; for (u2 = rt->units; u2; u2 = u2->next) { if (!fval(u2->faction, FFL_SELECT)) { - if (cansee_depr(u2->faction, rt, u, 0)) { + if (cansee(u2->faction, rt, u, 0)) { fset(u2->faction, FFL_SELECT); if (!m) m = msg_message("astral_appear", "unit", u); @@ -5315,7 +5315,7 @@ int sp_leaveastral(castorder * co) m = NULL; for (u2 = r->units; u2; u2 = u2->next) { if (!fval(u2->faction, FFL_SELECT)) { - if (cansee_depr(u2->faction, r, u, 0)) { + if (cansee(u2->faction, r, u, 0)) { fset(u2->faction, FFL_SELECT); if (!m) m = msg_message("astral_disappear", "unit", u); @@ -5333,7 +5333,7 @@ int sp_leaveastral(castorder * co) m = NULL; for (u2 = rt->units; u2; u2 = u2->next) { if (!fval(u2->faction, FFL_SELECT)) { - if (cansee_depr(u2->faction, rt, u, 0)) { + if (cansee(u2->faction, rt, u, 0)) { fset(u2->faction, FFL_SELECT); if (!m) m = msg_message("astral_appear", "unit", u); @@ -5443,7 +5443,7 @@ int sp_fetchastral(castorder * co) m = NULL; for (u2 = ro->units; u2; u2 = u2->next) { if (!fval(u2->faction, FFL_SELECT)) { - if (cansee_depr(u2->faction, ro, u, 0)) { + if (cansee(u2->faction, ro, u, 0)) { fset(u2->faction, FFL_SELECT); if (!m) m = msg_message("astral_disappear", "unit", u); @@ -5460,7 +5460,7 @@ int sp_fetchastral(castorder * co) m = NULL; for (u2 = rt->units; u2; u2 = u2->next) { if (!fval(u2->faction, FFL_SELECT)) { - if (cansee_depr(u2->faction, rt, u, 0)) { + if (cansee(u2->faction, rt, u, 0)) { fset(u2->faction, FFL_SELECT); if (!m) m = msg_message("astral_appear", "unit", u); diff --git a/src/spells/combatspells.c b/src/spells/combatspells.c index da2d52182..8eb240cf7 100644 --- a/src/spells/combatspells.c +++ b/src/spells/combatspells.c @@ -131,7 +131,7 @@ int damage_spell(struct castorder * co, int dmg, int strength) enemies = count_enemies(b, fi, FIGHT_ROW, BEHIND_ROW - 1, SELECT_ADVANCE); if (enemies == 0) { message *m = - msg_message("battle::out_of_range", "mage spell", fi->unit, sp); + msg_message("spell_out_of_range", "mage spell", fi->unit, sp); message_all(b, m); msg_release(m); return 0; @@ -144,7 +144,7 @@ int damage_spell(struct castorder * co, int dmg, int strength) killed += terminate(dt, at, AT_COMBATSPELL, damage, false); } - m = msg_message("battle::combatspell", "mage spell dead", + m = msg_message("cast_combatspell", "mage spell dead", fi->unit, sp, killed); message_all(b, m); msg_release(m); @@ -171,7 +171,7 @@ int sp_petrify(struct castorder * co) enemies = count_enemies(b, fi, FIGHT_ROW, BEHIND_ROW, SELECT_ADVANCE); if (!enemies) { message *m = - msg_message("battle::out_of_range", "mage spell", fi->unit, sp); + msg_message("spell_out_of_range", "mage spell", fi->unit, sp); message_all(b, m); msg_release(m); return 0; @@ -218,7 +218,7 @@ int sp_stun(struct castorder * co) enemies = count_enemies(b, fi, FIGHT_ROW, BEHIND_ROW, SELECT_ADVANCE); if (!enemies) { message *m = - msg_message("battle::out_of_range", "mage spell", fi->unit, sp); + msg_message("spell_out_of_range", "mage spell", fi->unit, sp); message_all(b, m); msg_release(m); return 0; @@ -366,7 +366,7 @@ int sp_sleep(struct castorder * co) enemies = count_enemies(b, fi, FIGHT_ROW, BEHIND_ROW, SELECT_ADVANCE); if (!enemies) { - m = msg_message("battle::out_of_range", "mage spell", fi->unit, sp); + m = msg_message("spell_out_of_range", "mage spell", fi->unit, sp); message_all(b, m); msg_release(m); return 0; @@ -485,7 +485,7 @@ int sp_mindblast_temp(struct castorder * co) int enemies = count_enemies(b, fi, FIGHT_ROW, BEHIND_ROW, SELECT_ADVANCE); if (!enemies) { - m = msg_message("battle::out_of_range", "mage spell", fi->unit, sp); + m = msg_message("spell_out_of_range", "mage spell", fi->unit, sp); message_all(b, m); msg_release(m); return 0; @@ -551,7 +551,7 @@ int sp_mindblast(struct castorder * co) int enemies = count_enemies(b, fi, FIGHT_ROW, BEHIND_ROW, SELECT_ADVANCE); if (!enemies) { - m = msg_message("battle::out_of_range", "mage spell", fi->unit, sp); + m = msg_message("spell_out_of_range", "mage spell", fi->unit, sp); message_all(b, m); msg_release(m); return 0; @@ -634,7 +634,7 @@ int sp_dragonodem(struct castorder * co) if (!enemies) { struct message *m = - msg_message("battle::out_of_range", "mage spell", fi->unit, sp); + msg_message("spell_out_of_range", "mage spell", fi->unit, sp); message_all(b, m); msg_release(m); return 0; @@ -653,7 +653,7 @@ int sp_dragonodem(struct castorder * co) } m = - msg_message("battle::combatspell", "mage spell dead", fi->unit, sp, + msg_message("cast_combatspell", "mage spell dead", fi->unit, sp, killed); message_all(b, m); msg_release(m); @@ -682,7 +682,7 @@ int sp_immolation(struct castorder * co) if (!count_enemies(b, fi, FIGHT_ROW, AVOID_ROW, SELECT_ADVANCE | SELECT_FIND)) { message *m = - msg_message("battle::out_of_range", "mage spell", fi->unit, sp); + msg_message("spell_out_of_range", "mage spell", fi->unit, sp); message_all(b, m); msg_release(m); return 0; @@ -710,7 +710,7 @@ int sp_immolation(struct castorder * co) selist_free(fgs); m = - msg_message("battle::combatspell", "mage spell killed", fi->unit, sp, + msg_message("cast_combatspell", "mage spell killed", fi->unit, sp, killed); message_all(b, m); msg_release(m); @@ -736,7 +736,7 @@ int sp_drainodem(fighter * fi, int level, double power, spell * sp) enemies = count_enemies(b, fi, FIGHT_ROW, BEHIND_ROW - 1, SELECT_ADVANCE); if (!enemies) { - m = msg_message("battle::out_of_range", "mage spell", fi->unit, sp); + m = msg_message("spell_out_of_range", "mage spell", fi->unit, sp); message_all(b, m); msg_release(m); return 0; @@ -917,7 +917,7 @@ int sp_chaosrow(struct castorder * co) bool chaosrow = strcmp(sp->sname, "chaosrow") == 0; if (!count_enemies(b, fi, FIGHT_ROW, NUMROWS, SELECT_ADVANCE | SELECT_FIND)) { - m = msg_message("battle::out_of_range", "mage spell", fi->unit, sp); + m = msg_message("spell_out_of_range", "mage spell", fi->unit, sp); message_all(b, m); msg_release(m); return 0; @@ -1167,7 +1167,7 @@ int sp_frighten(struct castorder * co) enemies = count_enemies(b, fi, FIGHT_ROW, BEHIND_ROW - 1, SELECT_ADVANCE); if (!enemies) { message *m = - msg_message("battle::out_of_range", "mage spell", fi->unit, sp); + msg_message("spell_out_of_range", "mage spell", fi->unit, sp); message_all(b, m); msg_release(m); return 0; @@ -1217,7 +1217,7 @@ int sp_tiredsoldiers(struct castorder * co) if (!count_enemies(b, fi, FIGHT_ROW, BEHIND_ROW, SELECT_ADVANCE | SELECT_FIND)) { message *m = - msg_message("battle::out_of_range", "mage spell", fi->unit, sp); + msg_message("spell_out_of_range", "mage spell", fi->unit, sp); message_all(b, m); msg_release(m); return 0; @@ -1263,7 +1263,7 @@ int sp_windshield(struct castorder * co) enemies = count_enemies(b, fi, BEHIND_ROW, BEHIND_ROW, SELECT_ADVANCE); if (!enemies) { - m = msg_message("battle::out_of_range", "mage spell", fi->unit, sp); + m = msg_message("spell_out_of_range", "mage spell", fi->unit, sp); message_all(b, m); msg_release(m); return 0; diff --git a/src/spy.c b/src/spy.c index 54d8f9c70..ff1f6da4e 100644 --- a/src/spy.c +++ b/src/spy.c @@ -193,7 +193,7 @@ static bool can_set_factionstealth(const unit * u, const faction * f) if (ru->number) { faction *fv = visible_faction(f, ru); if (fv == f) { - if (cansee_depr(f, lastr, ru, 0)) + if (cansee(f, lastr, ru, 0)) return true; } }