diff --git a/src/common/kernel/magic.c b/src/common/kernel/magic.c
index 3c4304db1..0117a43c9 100644
--- a/src/common/kernel/magic.c
+++ b/src/common/kernel/magic.c
@@ -2526,9 +2526,9 @@ magic(void)
* fehlermeldungen die anzeigen das der magier diesen Spruch
* nur in diese Situation nicht anwenden kann, noch eine
* einfache Sicherheitsprüfung kommen */
- if (knowsspell(r, u, sp) == false) {
+ if (!knowsspell(r, u, sp)) {
/* vorsicht! u kann der familiar sein */
- if (!familiar){
+ if (!familiar) {
cmistake(u, ord, 173, MSG_MAGIC);
continue;
}
diff --git a/src/common/kernel/movement.c b/src/common/kernel/movement.c
index 09d0d690b..2883a06fd 100644
--- a/src/common/kernel/movement.c
+++ b/src/common/kernel/movement.c
@@ -1048,6 +1048,38 @@ cap_route(region * r, region_list * route, region_list * route_end, int speed)
return iroute;
}
+static region *
+next_region(unit * u, region * current, region * next)
+{
+ border * b = get_borders(current, next);
+ while (b!=NULL) {
+ if (b->type->move) {
+ region * rto = b->type->move(b, u, current, next, true);
+ if (rto!=next) {
+ /* the target region was changed (bt_wisps, for example). check the
+ * new target region for borders */
+ next = rto;
+ b = get_borders(current, next);
+ continue;
+ }
+ }
+ b = b->next;
+ }
+ return next;
+}
+
+static region_list *
+reroute(unit * u, region_list * route, region_list * route_end)
+{
+ region * current = u->region;
+ while (route!=route_end) {
+ region * next = next_region(u, current, route->data);
+ if (next!=route->data) break;
+ route=route->next;
+ }
+ return route;
+}
+
static void
make_route(unit * u, order * ord, region_list ** routep)
{
@@ -1067,27 +1099,13 @@ make_route(unit * u, order * ord, region_list ** routep)
}
while (next!=NULL) {
- border * b = get_borders(current, next);
direction_t reldir;
if (current==next) {
/* PAUSE */
break;
}
- while (b!=NULL) {
- if (b->type->move) {
- region * rto = b->type->move(b, u, current, next, true);
- if (rto!=next) {
- /* the target region was changed (bt_wisps, for example). check the
- * new target region for borders */
- next = rto;
- b = get_borders(current, next);
- continue;
- }
- }
- b = b->next;
- }
-
+ next = next_region(u, current, next);
reldir = reldirection(current, next);
add_regionlist(iroute, next);
@@ -1914,7 +1932,8 @@ travel(unit * u, region_list ** routep)
itoa36(ut->no));
follow_order = parse_order(str, uf->faction->locale);
- route_end = travel_i(uf, route_begin, route_end, follow_order, TRAVEL_FOLLOWING, &followers);
+ route_end = reroute(uf, route_begin, route_end);
+ travel_i(uf, route_begin, route_end, follow_order, TRAVEL_FOLLOWING, &followers);
caught_target(uf->region, uf);
free_order(follow_order);
}
diff --git a/src/common/util/util.vcproj b/src/common/util/util.vcproj
index 941d140b4..efed1f8a7 100644
--- a/src/common/util/util.vcproj
+++ b/src/common/util/util.vcproj
@@ -257,6 +257,9 @@
+
+