X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;ds=sidebyside;f=saveresume.c;h=e4d9959aeaa59e460f99bbc11fc30fcbedfd2426;hb=aeaa0400cb39846bce3e7abe4566a6c9566e39a4;hp=c1b5eb202bb52f09b1f3ab963c7ec6bb666c2384;hpb=f496bff9452415ea1babf9aab1019f905ca8735a;p=open-adventure.git diff --git a/saveresume.c b/saveresume.c index c1b5eb2..e4d9959 100644 --- a/saveresume.c +++ b/saveresume.c @@ -184,6 +184,39 @@ bool is_valid(struct game_t valgame) return false; } + /* Check that properties of objects aren't beyond expected */ + for (int obj = 0; obj <= NOBJECTS; obj++) { + if (valgame.prop[obj] < STATE_NOTFOUND || valgame.prop[obj] > 1) { + switch (obj) { + case RUG: + case DRAGON: + case BIRD: + case BOTTLE: + case PLANT: + case PLANT2: + case TROLL: + case URN: + case EGGS: + case VASE: + case CHAIN: + if (valgame.prop[obj] == 2) // There are multiple different states, but it's convenient to clump them together + continue; + case BEAR: + if (valgame.prop[BEAR] == CONTENTED_BEAR || game.prop[BEAR] == BEAR_DEAD) + continue; + default: + return false; + } + } + } + + /* Check that we have objects at locations */ + for (loc_t loc = LOC_NOWHERE; loc <= NLOCATIONS; loc++) { + if (valgame.atloc[loc] < NO_OBJECT || valgame.atloc[loc] > NLOCATIONS) { + return false; + } + } + return true; }