diff --git a/conf/e3/config.json b/conf/e3/config.json
index 236001e1d..421a962a7 100644
--- a/conf/e3/config.json
+++ b/conf/e3/config.json
@@ -55,7 +55,7 @@
"rules.migrants.max": 0,
"rules.reserve.twophase": true,
"rules.owners.force_leave": false,
- "rules.monsters.attack_chance": 0.0,
+ "rules.monsters.attack_chance": 0.1,
"rules.transfermen": false,
"rules.stealth.faction": true,
"rules.stealth.anon_battle": false,
diff --git a/res/eressea/races.xml b/res/eressea/races.xml
index 26a63752f..7f6c6d873 100644
--- a/res/eressea/races.xml
+++ b/res/eressea/races.xml
@@ -430,7 +430,7 @@
-
+
@@ -733,7 +733,7 @@
-
+
@@ -745,7 +745,7 @@
-
+
@@ -758,7 +758,7 @@
-
+
@@ -1170,7 +1170,7 @@
-
+
diff --git a/src/kernel/race.c b/src/kernel/race.c
index 748a5ee06..0339a1b49 100644
--- a/src/kernel/race.c
+++ b/src/kernel/race.c
@@ -175,8 +175,6 @@ race *rc_get_or_create(const char *zName)
assert(zName);
rc = rc_find_i(zName);
if (!rc) {
- char zBuffer[80];
-
rc = (race *)calloc(sizeof(race), 1);
rc->hitpoints = 1;
rc->weight = PERSON_WEIGHT;
@@ -189,8 +187,7 @@ race *rc_get_or_create(const char *zName)
log_error("race '%s' has an invalid name. remove spaces\n", zName);
assert(strchr(zName, ' ') == NULL);
}
- strcpy(zBuffer, zName);
- rc->_name = _strdup(zBuffer);
+ rc->_name = _strdup(zName);
rc->precombatspell = NULL;
rc->attack[0].type = AT_COMBATSPELL;
diff --git a/src/monsters.c b/src/monsters.c
index 12acb9191..523c6f02a 100644
--- a/src/monsters.c
+++ b/src/monsters.c
@@ -146,10 +146,8 @@ static void reduce_weight(unit * u)
static order *monster_attack(unit * u, const unit * target)
{
- if (u->region != target->region)
- return NULL;
- if (u->faction == target->faction)
- return NULL;
+ assert(u->region == target->region);
+ assert(u->faction != target->faction);
if (!cansee(u->faction, u->region, target, 0))
return NULL;
if (monster_is_waiting(u))
@@ -167,7 +165,7 @@ static order *get_money_for_dragon(region * r, unit * u, int wanted)
if (attack_chance > 0.0 && is_guard(u, GUARD_TAX)) {
/* attackiere bewachende Einheiten nur wenn wir selbst schon bewachen */
for (u2 = r->units; u2; u2 = u2->next) {
- if (u2 != u && is_guard(u2, GUARD_TAX)) {
+ if (u2 != u && is_guard(u2, GUARD_TAX) && u->faction!=u2->faction) {
/*In E3 + E4 etwas problematisch, da der Regionsbesitzer immer bewacht. Der Drache greift also immer die Burg an!*/
order *ord = monster_attack(u, u2);
if (ord)
@@ -557,8 +555,7 @@ static void monster_attacks(unit * u)
unit *u2;
for (u2 = r->units; u2; u2 = u2->next) {
- if (cansee(u->faction, r, u2, 0) && u2->faction != u->faction && inside_building(u2) != u->building
- && chance(0.75)) {
+ if (u2->faction != u->faction && cansee(u->faction, r, u2, 0) && !inside_building(u2)) {
order *ord = monster_attack(u, u2);
if (ord)
addlist(&u->orders, ord);
diff --git a/src/move.c b/src/move.c
index f5da898cc..459776915 100644
--- a/src/move.c
+++ b/src/move.c
@@ -950,9 +950,7 @@ static bool is_guardian_r(const unit * guard)
if ((guard->flags & UFL_GUARD) == 0)
return false;
- if (!armedmen(guard, true) && !fval(u_race(guard), RCF_UNARMEDGUARD))
- return false;
- return true;
+ return armedmen(guard, true) > 0 || fval(u_race(guard), RCF_UNARMEDGUARD);
}
bool is_guard(const struct unit * u, unsigned int mask)
diff --git a/src/spells.c b/src/spells.c
index 71591b3aa..252c6d8b3 100644
--- a/src/spells.c
+++ b/src/spells.c
@@ -6567,14 +6567,14 @@ static spelldata spell_functions[] = {
{ "analysedream", sp_analysedream, 0 },
{ "disturbingdreams", sp_disturbingdreams, 0 },
{ "sleep", sp_sleep, 0 },
- { "wisps", 0, 0 }, /* this spell is gone */
+ { "wisps", 0, 0 }, /* TODO: this spell is gone */
{ "gooddreams", sp_gooddreams, 0 },
{ "illaundestroymagic", sp_destroy_magic, 0 },
{ "clone", sp_clonecopy, 0 },
{ "bad_dreams", sp_baddreams, 0 },
{ "mindblast", sp_mindblast_temp, 0 },
{ "orkdream", sp_sweetdreams, 0 },
- { "summon_alp", sp_summon_alp, 0 },
+ { "summon_alp", sp_summon_alp, 0 }, // TODO: this spell is disabled everywhere
/* M_CERDDOR */
{ "appeasement", sp_denyattack, 0 },
{ "song_of_healing", sp_healing, 0 },