diff --git a/src/kernel/save.c b/src/kernel/save.c index 0d7c534cd..e074554db 100644 --- a/src/kernel/save.c +++ b/src/kernel/save.c @@ -50,6 +50,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. /* attributes includes */ #include +#include /* util includes */ #include @@ -1391,6 +1392,31 @@ void writefaction(struct storage *store, const faction * f) write_spells(f->spellbook, store); } +static void repair_unit(unit * u) { + static const race * rctoad; + if (!rctoad) rctoad = rc_find("toad"); + + if (u->race==rctoad) { + int found = 0; + attrib * a = a_find(u->attribs, &at_eventhandler); + while (!found && a && a->type==&at_eventhandler) { + struct trigger ** tlist = get_triggers(a, "timer"); + while (!found && tlist && *tlist) { + trigger * t = *tlist; + if (strcmp("changerace", t->type->name)==0) { + found = 1; + } + tlist = &t->next; + } + a = a->next; + } + if (!found) { + u->race = u->faction->race; + log_warning(("This toad did not have a changerace trigger: %s\n", unitname(u))); + } + } +} + int readgame(const char *filename, int mode, int backup) { int i, n, p; @@ -1616,6 +1642,7 @@ int readgame(const char *filename, int mode, int backup) unit *u = read_unit(store); sc_mage *mage; + repair_unit(u); assert(u->region == NULL); u->region = r; *up = u; diff --git a/src/util/attrib.c b/src/util/attrib.c index 9c04c80d6..c5854348b 100644 --- a/src/util/attrib.c +++ b/src/util/attrib.c @@ -265,8 +265,8 @@ int a_read(struct storage *store, attrib ** attribs, void *owner) { int key, retval = AT_READ_OK; char zText[128]; - strcpy(zText, "unknown"); - + + zText[0] = 0; key = -1; store->r_tok_buf(store, zText, sizeof(zText)); if (strcmp(zText, "end") == 0)