diff --git a/src/kernel/region.c b/src/kernel/region.c index 5cb86ff47..b582c406e 100644 --- a/src/kernel/region.c +++ b/src/kernel/region.c @@ -917,6 +917,7 @@ void free_region(region * r) while (r->units) { unit *u = r->units; r->units = u->next; + u->region = NULL; uunhash(u); free_unit(u); free(u); diff --git a/src/kernel/save.c b/src/kernel/save.c index 7a9e12286..83a218622 100644 --- a/src/kernel/save.c +++ b/src/kernel/save.c @@ -1707,6 +1707,7 @@ int read_game(gamedata *data) { if (data->version < NORCSPELL_VERSION && u_race(u) == rc_spell) { set_observer(r, u->faction, get_level(u, SK_PERCEPTION), u->age); + u_setfaction(u, NULL); free_unit(u); } else { diff --git a/src/kernel/unit.c b/src/kernel/unit.c index e6b8757ef..7b6f135fc 100644 --- a/src/kernel/unit.c +++ b/src/kernel/unit.c @@ -1404,6 +1404,7 @@ int invisible(const unit * target, const unit * viewer) */ void free_unit(unit * u) { + assert(!u->region); free(u->_name); free(u->display); free_order(u->thisorder); diff --git a/src/magic.c b/src/magic.c index 3cac1cb52..93c5009f5 100644 --- a/src/magic.c +++ b/src/magic.c @@ -3010,7 +3010,6 @@ int cast_spell(struct castorder *co) fun = get_spellcast(sp->sname); if (!fun) { - log_warning("no spell function for %s, try callback", sp->sname); return callbacks.cast_spell(co, fname); } return fun(co);