/* ============== WriteLevelLocals All pointer variables (except function pointers) must be handled specially. ============== */ static void WriteLevelLocals () { level_locals_t *temp = (level_locals_t *)gi.Malloc(sizeof(level_locals_t), TAG_TEMP_WORKSPACE, qfalse); *temp = level; // copy out all data into a temp space EnumerateFields(savefields_LevelLocals, (byte *)temp, 'LVLC', LLOFS(LEVEL_LOCALS_T_SAVESTOP)); // sizeof(temp)); gi.Free(temp); }
/* ============== ReadLevelLocals All pointer variables (except function pointers) must be handled specially. ============== */ void ReadLevelLocals () { // preserve client ptr either side of the load, because clients are already saved/loaded through Read/Writegame... // gclient_t *pClients = level.clients; // save clients level_locals_t temp = level; // struct copy EvaluateFields(savefields_LevelLocals, (byte *)&temp, (byte *)&level, 'LVLC', LLOFS(LEVEL_LOCALS_T_SAVESTOP),qfalse); // sizeof(level_locals_t)); level = temp; // struct copy level.clients = pClients; // restore clients }
/* ============== ReadLevelLocals All pointer variables (except function pointers) must be handled specially. ============== */ static void ReadLevelLocals () { // preserve client ptr either side of the load, because clients are already saved/loaded through Read/Writegame... // gclient_t *pClients = level.clients; // save clients level_locals_t *temp = (level_locals_t *)gi.Malloc(sizeof(level_locals_t), TAG_TEMP_WORKSPACE, qfalse); *temp = level; // struct copy EvaluateFields(savefields_LevelLocals, (byte *)temp, (byte *)&level, 'LVLC', LLOFS(LEVEL_LOCALS_T_SAVESTOP),qfalse); // sizeof(level_locals_t)); level = *temp; // struct copy level.clients = pClients; // restore clients gi.Free(temp); }
{"", FOFS(activator), F_EDICT}, {"", FOFS(groundentity), F_EDICT}, {"", FOFS(teamchain), F_EDICT}, {"", FOFS(teammaster), F_EDICT}, {"", FOFS(owner), F_EDICT}, {"", FOFS(mynoise), F_EDICT}, {"", FOFS(mynoise2), F_EDICT}, {"", FOFS(target_ent), F_EDICT}, {"", FOFS(chain), F_EDICT}, {NULL, 0, F_INT} }; field_t levelfields[] = { {"", LLOFS(changemap), F_LSTRING}, {"", LLOFS(sight_client), F_EDICT}, {"", LLOFS(sight_entity), F_EDICT}, {"", LLOFS(sound_entity), F_EDICT}, {"", LLOFS(sound2_entity), F_EDICT}, {NULL, 0, F_INT} }; field_t clientfields[] = { {"", CLOFS(pers.weapon), F_ITEM}, {"", CLOFS(pers.lastweapon), F_ITEM}, {"", CLOFS(newweapon), F_ITEM},
{"current_node", FOFS(current_node), F_INT}, {"goal_node", FOFS(goal_node), F_INT}, {"next_node", FOFS(next_node), F_INT}, {"node_timeout", FOFS(node_timeout), F_INT}, {"last_node", FOFS(last_node), F_INT}, {"tries", FOFS(tries), F_INT}, {"state", FOFS(state), F_INT}, // ACEBOT_END {0, 0, 0, 0} }; field_t levelfields[] = { {"changemap", LLOFS(changemap), F_LSTRING}, {"sight_client", LLOFS(sight_client), F_EDICT}, {"sight_entity", LLOFS(sight_entity), F_EDICT}, {"sound_entity", LLOFS(sound_entity), F_EDICT}, {"sound2_entity", LLOFS(sound2_entity), F_EDICT}, {"disguise_violator", LLOFS(disguise_violator), F_EDICT}, {NULL, 0, F_INT} }; field_t clientfields[] = { {"pers.weapon", CLOFS(pers.weapon), F_ITEM}, {"pers.lastweapon", CLOFS(pers.lastweapon), F_ITEM}, {"newweapon", CLOFS(newweapon), F_ITEM}, {"chasecam", CLOFS(chasecam), F_EDICT},
/* ============== WriteLevelLocals All pointer variables (except function pointers) must be handled specially. ============== */ void WriteLevelLocals () { level_locals_t temp = level; // copy out all data into a temp space EnumerateFields(savefields_LevelLocals, (byte *)&temp, 'LVLC', LLOFS(LEVEL_LOCALS_T_SAVESTOP)); // sizeof(temp)); }