void write_allies(gamedata * data, const allies *alist) { const allies *al; for (al = alist; al; al = al->next) { int i; for (i = 0; i != al->num; ++i) { const faction * f = al->factions[i]; if (f && f->_alive) { write_faction_reference(f, data->store); assert(al->status[i] > 0); WRITE_INT(data->store, al->status[i]); } } } write_faction_reference(NULL, data->store); }
static void createunit_write(const trigger * t, struct storage *store) { createunit_data *td = (createunit_data *)t->data.v; write_faction_reference(td->f, store); write_region_reference(td->r, store); write_race_reference(td->race, store); WRITE_INT(store, td->number); }
void write_groups(struct storage *store, const faction * f) { group *g; for (g = f->groups; g; g = g->next) { ally *a; WRITE_INT(store, g->gid); WRITE_STR(store, g->name); for (a = g->allies; a; a = a->next) { if (a->faction) { write_faction_reference(a->faction, store); WRITE_INT(store, a->status); } } WRITE_INT(store, 0); a_write(store, g->attribs, g); WRITE_SECTION(store); } WRITE_INT(store, 0); }
static void object_write(const attrib * a, const void *owner, struct storage *store) { const object_data *data = (object_data *) a->data.v; int type = (int)data->type; WRITE_TOK(store, data->name); WRITE_INT(store, type); switch (data->type) { case TINTEGER: WRITE_INT(store, data->data.i); break; case TREAL: WRITE_FLT(store, (float)data->data.real); break; case TSTRING: WRITE_STR(store, data->data.str); break; case TUNIT: write_unit_reference(data->data.u, store); break; case TFACTION: write_faction_reference(data->data.f, store); break; case TBUILDING: write_building_reference(data->data.b, store); break; case TSHIP: /* write_ship_reference(data->data.sh, store); */ assert(!"not implemented"); break; case TREGION: write_region_reference(data->data.r, store); break; case TNONE: break; default: assert(!"illegal type in object-attribute"); } }