void curse_write(const attrib * a, const void *owner, struct storage *store) { unsigned int flags; curse *c = (curse *) a->data.v; const curse_type *ct = c->type; unit *mage = (c->magician && c->magician->number) ? c->magician : NULL; /* copied from c_clearflag */ flags = (c->flags & ~CURSE_ISNEW) | (c->type->flags & CURSE_ISNEW); WRITE_INT(store, c->no); WRITE_TOK(store, ct->cname); WRITE_INT(store, flags); WRITE_INT(store, c->duration); WRITE_FLT(store, (float)c->vigour); write_unit_reference(mage, store); WRITE_FLT(store, (float)c->effect); if (c->type->write) c->type->write(store, c, owner); else if (c->type->typ == CURSETYP_UNIT) { WRITE_INT(store, c->data.i); } if (c->type->typ == CURSETYP_REGION) { write_region_reference((region *) c->data.v, store); } }
static void createcurse_write(const trigger * t, struct storage *store) { createcurse_data *td = (createcurse_data *)t->data.v; write_unit_reference(td->mage, store); write_unit_reference(td->target, store); WRITE_TOK(store, td->type->cname); WRITE_FLT(store, (float)td->vigour); WRITE_INT(store, td->duration); WRITE_FLT(store, (float)td->effect); WRITE_INT(store, td->men); }
static int tolua_storage_write(lua_State * L) { gamedata *data = (gamedata *)tolua_tousertype(L, 1, 0); if (data->version && tolua_isnumber(L, 2, 0, 0)) { lua_Number num = tolua_tonumber(L, 2, 0); double n; if (modf(num, &n) == 0.0) { WRITE_INT(data->store, (int)num); } else { WRITE_FLT(data->store, (float)num); } } return 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"); } }