forked from github/server
attrib.read gets a gamedata object
stop using global.data_version for github issue #479
This commit is contained in:
parent
7f6ced99b9
commit
3e584245c0
9 changed files with 20 additions and 21 deletions
|
@ -152,7 +152,7 @@ static int dict_read(attrib * a, void *owner, gamedata *data)
|
||||||
case TREGION:
|
case TREGION:
|
||||||
result =
|
result =
|
||||||
read_reference(&dd->data.r, store, read_region_reference,
|
read_reference(&dd->data.r, store, read_region_reference,
|
||||||
RESOLVE_REGION(global.data_version));
|
RESOLVE_REGION(data->version));
|
||||||
if (result == 0 && !dd->data.r) {
|
if (result == 0 && !dd->data.r) {
|
||||||
return AT_READ_FAIL;
|
return AT_READ_FAIL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ static int read_targetregion(attrib * a, void *owner, gamedata *data)
|
||||||
{
|
{
|
||||||
int result =
|
int result =
|
||||||
read_reference(&a->data.v, data->store, read_region_reference,
|
read_reference(&a->data.v, data->store, read_region_reference,
|
||||||
RESOLVE_REGION(global.data_version));
|
RESOLVE_REGION(data->version));
|
||||||
if (result == 0 && !a->data.v)
|
if (result == 0 && !a->data.v)
|
||||||
return AT_READ_FAIL;
|
return AT_READ_FAIL;
|
||||||
return AT_READ_OK;
|
return AT_READ_OK;
|
||||||
|
|
|
@ -106,7 +106,7 @@ static int lc_read(struct attrib *a, void *owner, gamedata *data)
|
||||||
building_action *bd = (building_action *)a->data.v;
|
building_action *bd = (building_action *)a->data.v;
|
||||||
building *b = (building *)owner;
|
building *b = (building *)owner;
|
||||||
int result = 0;
|
int result = 0;
|
||||||
if (global.data_version < ATTRIBOWNER_VERSION) {
|
if (data->version < ATTRIBOWNER_VERSION) {
|
||||||
result = read_reference(&b, store, read_building_reference, resolve_building);
|
result = read_reference(&b, store, read_building_reference, resolve_building);
|
||||||
assert(b == owner);
|
assert(b == owner);
|
||||||
}
|
}
|
||||||
|
|
|
@ -659,7 +659,7 @@ int read_borders(gamedata *data)
|
||||||
assert(bid <= nextborder);
|
assert(bid <= nextborder);
|
||||||
if (type->read)
|
if (type->read)
|
||||||
type->read(b, store);
|
type->read(b, store);
|
||||||
if (global.data_version < NOBORDERATTRIBS_VERSION) {
|
if (data->version < NOBORDERATTRIBS_VERSION) {
|
||||||
attrib *a = NULL;
|
attrib *a = NULL;
|
||||||
int result = read_attribs(data, &a, b);
|
int result = read_attribs(data, &a, b);
|
||||||
if (border_convert_cb) {
|
if (border_convert_cb) {
|
||||||
|
|
|
@ -238,7 +238,7 @@ int curse_read(attrib * a, void *owner, gamedata *data)
|
||||||
if (c->type->typ == CURSETYP_REGION) {
|
if (c->type->typ == CURSETYP_REGION) {
|
||||||
int rr =
|
int rr =
|
||||||
read_reference(&c->data.v, store, read_region_reference,
|
read_reference(&c->data.v, store, read_region_reference,
|
||||||
RESOLVE_REGION(global.data_version));
|
RESOLVE_REGION(data->version));
|
||||||
if (ur == 0 && rr == 0 && !c->data.v) {
|
if (ur == 0 && rr == 0 && !c->data.v) {
|
||||||
return AT_READ_FAIL;
|
return AT_READ_FAIL;
|
||||||
}
|
}
|
||||||
|
@ -255,12 +255,11 @@ void curse_write(const attrib * a, const void *owner, struct storage *store)
|
||||||
unit *mage = (c->magician && c->magician->number) ? c->magician : NULL;
|
unit *mage = (c->magician && c->magician->number) ? c->magician : NULL;
|
||||||
|
|
||||||
/* copied from c_clearflag */
|
/* copied from c_clearflag */
|
||||||
if (global.data_version < EXPLICIT_CURSE_ISNEW_VERSION) {
|
#if RELEASE_VERSION < EXPLICIT_CURSE_ISNEW_VERSION
|
||||||
flags = (c->flags & ~CURSE_ISNEW) | (c->type->flags & CURSE_ISNEW);
|
flags = (c->flags & ~CURSE_ISNEW) | (c->type->flags & CURSE_ISNEW);
|
||||||
}
|
#else
|
||||||
else {
|
flags = c->flags | c->type->flags;
|
||||||
flags = c->flags | c->type->flags;
|
#endif
|
||||||
}
|
|
||||||
|
|
||||||
WRITE_INT(store, c->no);
|
WRITE_INT(store, c->no);
|
||||||
WRITE_TOK(store, ct->cname);
|
WRITE_TOK(store, ct->cname);
|
||||||
|
|
|
@ -135,7 +135,7 @@ static void test_write_flag(CuTest *tc) {
|
||||||
data.strm.api->rewind(data.strm.handle);
|
data.strm.api->rewind(data.strm.handle);
|
||||||
curse_read(fix.r->attribs, fix.r, &data);
|
curse_read(fix.r->attribs, fix.r, &data);
|
||||||
CuAssertIntEquals(tc, 42 | CURSE_ISNEW, ((curse *) fix.r->attribs->data.v)->flags);
|
CuAssertIntEquals(tc, 42 | CURSE_ISNEW, ((curse *) fix.r->attribs->data.v)->flags);
|
||||||
global.data_version = RELEASE_VERSION;
|
global.data_version = RELEASE_VERSION; // FIXME: should not need this!
|
||||||
CuAssertIntEquals(tc, RELEASE_VERSION, global.data_version);
|
CuAssertIntEquals(tc, RELEASE_VERSION, global.data_version);
|
||||||
|
|
||||||
mstream_done(&data.strm);
|
mstream_done(&data.strm);
|
||||||
|
|
|
@ -1759,7 +1759,7 @@ int readgame(const char *filename, bool backup)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (u = f->units; u; u = u->nextF) {
|
for (u = f->units; u; u = u->nextF) {
|
||||||
if (global.data_version < SPELL_LEVEL_VERSION) {
|
if (gdata.version < SPELL_LEVEL_VERSION) {
|
||||||
sc_mage *mage = get_mage(u);
|
sc_mage *mage = get_mage(u);
|
||||||
if (mage) {
|
if (mage) {
|
||||||
faction *f = u->faction;
|
faction *f = u->faction;
|
||||||
|
@ -1778,12 +1778,12 @@ int readgame(const char *filename, bool backup)
|
||||||
}
|
}
|
||||||
if (u->number > 0) {
|
if (u->number > 0) {
|
||||||
f->_alive = true;
|
f->_alive = true;
|
||||||
if (global.data_version >= SPELL_LEVEL_VERSION) {
|
if (gdata.version >= SPELL_LEVEL_VERSION) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (global.data_version < SPELL_LEVEL_VERSION && f->spellbook) {
|
if (gdata.version < SPELL_LEVEL_VERSION && f->spellbook) {
|
||||||
spellbook_foreach(f->spellbook, cb_sb_maxlevel, f);
|
spellbook_foreach(f->spellbook, cb_sb_maxlevel, f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1836,7 +1836,7 @@ int writegame(const char *filename)
|
||||||
gdata.store = &store;
|
gdata.store = &store;
|
||||||
gdata.encoding = enc_gamedata;
|
gdata.encoding = enc_gamedata;
|
||||||
gdata.version = RELEASE_VERSION;
|
gdata.version = RELEASE_VERSION;
|
||||||
global.data_version = RELEASE_VERSION;
|
global.data_version = RELEASE_VERSION; // FIXME: no code that is writing should need this
|
||||||
n = STREAM_VERSION;
|
n = STREAM_VERSION;
|
||||||
fwrite(&gdata.version, sizeof(int), 1, F);
|
fwrite(&gdata.version, sizeof(int), 1, F);
|
||||||
fwrite(&n, sizeof(int), 1, F);
|
fwrite(&n, sizeof(int), 1, F);
|
||||||
|
|
|
@ -135,7 +135,7 @@ static int a_readicastle(attrib * a, void *owner, struct gamedata *data)
|
||||||
icastle_data *idata = (icastle_data *)a->data.v;
|
icastle_data *idata = (icastle_data *)a->data.v;
|
||||||
char token[32];
|
char token[32];
|
||||||
READ_TOK(store, token, sizeof(token));
|
READ_TOK(store, token, sizeof(token));
|
||||||
if (global.data_version < ATTRIBOWNER_VERSION) {
|
if (data->version < ATTRIBOWNER_VERSION) {
|
||||||
READ_INT(store, NULL);
|
READ_INT(store, NULL);
|
||||||
}
|
}
|
||||||
READ_INT(store, &idata->time);
|
READ_INT(store, &idata->time);
|
||||||
|
@ -378,7 +378,7 @@ static int read_seenspell(attrib * a, void *owner, struct gamedata *data)
|
||||||
sp = find_spellbyid((unsigned int)i);
|
sp = find_spellbyid((unsigned int)i);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (global.data_version < UNIQUE_SPELLS_VERSION) {
|
if (data->version < UNIQUE_SPELLS_VERSION) {
|
||||||
READ_INT(store, 0); /* ignore mtype */
|
READ_INT(store, 0); /* ignore mtype */
|
||||||
}
|
}
|
||||||
sp = find_spell(token);
|
sp = find_spell(token);
|
||||||
|
|
|
@ -113,12 +113,12 @@ static int resolve_exit(variant id, void *address)
|
||||||
static int wormhole_read(struct attrib *a, void *owner, struct gamedata *data)
|
static int wormhole_read(struct attrib *a, void *owner, struct gamedata *data)
|
||||||
{
|
{
|
||||||
storage *store = data->store;
|
storage *store = data->store;
|
||||||
resolve_fun resolver = (global.data_version < UIDHASH_VERSION)
|
resolve_fun resolver = (data->version < UIDHASH_VERSION)
|
||||||
? resolve_exit : resolve_region_id;
|
? resolve_exit : resolve_region_id;
|
||||||
read_fun reader = (global.data_version < UIDHASH_VERSION)
|
read_fun reader = (data->version < UIDHASH_VERSION)
|
||||||
? read_building_reference : read_region_reference;
|
? read_building_reference : read_region_reference;
|
||||||
|
|
||||||
if (global.data_version < ATTRIBOWNER_VERSION) {
|
if (data->version < ATTRIBOWNER_VERSION) {
|
||||||
READ_INT(store, NULL);
|
READ_INT(store, NULL);
|
||||||
}
|
}
|
||||||
if (read_reference(&a->data.v, store, reader, resolver) == 0) {
|
if (read_reference(&a->data.v, store, reader, resolver) == 0) {
|
||||||
|
|
Loading…
Reference in a new issue