Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenloader/intern/readfile.c')
-rw-r--r--source/blender/blenloader/intern/readfile.c1396
1 files changed, 996 insertions, 400 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 7921740cbe8..204176f64c3 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -29,11 +29,6 @@
#include "zlib.h"
-#ifdef WIN32
-#include "winsock2.h"
-#include "BLI_winstuff.h"
-#endif
-
#include <limits.h>
#include <stdio.h> // for printf fopen fwrite fclose sprintf FILE
#include <stdlib.h> // for getenv atoi
@@ -46,6 +41,8 @@
#include <sys/param.h> // for MAXPATHLEN
#else
#include <io.h> // for open close read
+#include "winsock2.h"
+#include "BLI_winstuff.h"
#endif
#include "DNA_anim_types.h"
@@ -53,6 +50,7 @@
#include "DNA_armature_types.h"
#include "DNA_ID.h"
#include "DNA_actuator_types.h"
+#include "DNA_boid_types.h"
#include "DNA_brush_types.h"
#include "DNA_camera_types.h"
#include "DNA_cloth_types.h"
@@ -93,6 +91,7 @@
#include "DNA_sdna_types.h"
#include "DNA_scene_types.h"
#include "DNA_sequence_types.h"
+#include "DNA_smoke_types.h"
#include "DNA_sound_types.h"
#include "DNA_space_types.h"
#include "DNA_texture_types.h"
@@ -114,6 +113,7 @@
#include "BKE_cloth.h"
#include "BKE_colortools.h"
#include "BKE_constraint.h"
+#include "BKE_context.h"
#include "BKE_curve.h"
#include "BKE_customdata.h"
#include "BKE_deform.h"
@@ -124,7 +124,6 @@
#include "BKE_group.h"
#include "BKE_image.h"
#include "BKE_ipo.h"
-#include "BKE_key.h" //void set_four_ipo
#include "BKE_lattice.h"
#include "BKE_library.h" // for wich_libbase
#include "BKE_main.h" // for Main
@@ -133,6 +132,7 @@
#include "BKE_multires.h"
#include "BKE_node.h" // for tree type defines
#include "BKE_object.h"
+#include "BKE_paint.h"
#include "BKE_particle.h"
#include "BKE_pointcache.h"
#include "BKE_property.h" // for get_ob_property
@@ -141,12 +141,13 @@
#include "BKE_scene.h"
#include "BKE_softbody.h" // sbNew()
#include "BKE_bullet.h" // bsbNew()
-#include "BKE_sculpt.h"
#include "BKE_sequence.h"
#include "BKE_texture.h" // for open_plugin_tex
#include "BKE_utildefines.h" // SWITCH_INT DATA ENDB DNA1 O_BINARY GLOB USER TEST REND
#include "BKE_idprop.h"
+#include "BKE_sound.h"
+
//XXX #include "BIF_butspace.h" // badlevel, for do_versions, patching event codes
//XXX #include "BIF_filelist.h" // badlevel too, where to move this? - elubie
//XXX #include "BIF_previewrender.h" // bedlelvel, for struct RenderInfo
@@ -1065,6 +1066,46 @@ int BLO_has_bfile_extension(char *str)
return (BLI_testextensie(str, ".ble") || BLI_testextensie(str, ".blend")||BLI_testextensie(str, ".blend.gz"));
}
+int BLO_is_a_library(char *path, char *dir, char *group)
+{
+ /* return ok when a blenderfile, in dir is the filename,
+ * in group the type of libdata
+ */
+ int len;
+ char *fd;
+
+ strcpy(dir, path);
+ len= strlen(dir);
+ if(len<7) return 0;
+ if( dir[len-1] != '/' && dir[len-1] != '\\') return 0;
+
+ group[0]= 0;
+ dir[len-1]= 0;
+
+ /* Find the last slash */
+ fd= (strrchr(dir, '/')>strrchr(dir, '\\'))?strrchr(dir, '/'):strrchr(dir, '\\');
+
+ if(fd==0) return 0;
+ *fd= 0;
+ if(BLO_has_bfile_extension(fd+1)) {
+ /* the last part of the dir is a .blend file, no group follows */
+ *fd= '/'; /* put back the removed slash separating the dir and the .blend file name */
+ }
+ else {
+ char *gp = fd+1; // in case we have a .blend file, gp points to the group
+
+ /* Find the last slash */
+ fd= (strrchr(dir, '/')>strrchr(dir, '\\'))?strrchr(dir, '/'):strrchr(dir, '\\');
+ if (!fd || !BLO_has_bfile_extension(fd+1)) return 0;
+
+ /* now we know that we are in a blend file and it is safe to
+ assume that gp actually points to a group */
+ if (BLI_streq("Screen", gp)==0)
+ BLI_strncpy(group, gp, GROUP_MAX);
+ }
+ return 1;
+}
+
/* ************** OLD POINTERS ******************* */
static void *newdataadr(FileData *fd, void *adr) /* only direct databocks */
@@ -1362,20 +1403,17 @@ void IDP_LibLinkProperty(IDProperty *prop, int switch_endian, FileData *fd);
static void IDP_DirectLinkIDPArray(IDProperty *prop, int switch_endian, FileData *fd)
{
- IDProperty **array;
+ IDProperty *array;
int i;
/*since we didn't save the extra buffer, set totallen to len.*/
prop->totallen = prop->len;
prop->data.pointer = newdataadr(fd, prop->data.pointer);
- if (switch_endian) {
- test_pointer_array(fd, prop->data.pointer);
- array= (IDProperty**) prop->data.pointer;
+ array= (IDProperty*) prop->data.pointer;
- for(i=0; i<prop->len; i++)
- IDP_DirectLinkProperty(array[i], switch_endian, fd);
- }
+ for(i=0; i<prop->len; i++)
+ IDP_DirectLinkProperty(&array[i], switch_endian, fd);
}
static void IDP_DirectLinkArray(IDProperty *prop, int switch_endian, FileData *fd)
@@ -1387,19 +1425,22 @@ static void IDP_DirectLinkArray(IDProperty *prop, int switch_endian, FileData *f
prop->totallen = prop->len;
prop->data.pointer = newdataadr(fd, prop->data.pointer);
- if (switch_endian) {
- if(prop->subtype == IDP_GROUP) {
- test_pointer_array(fd, prop->data.pointer);
- array= prop->data.pointer;
+ if(prop->subtype == IDP_GROUP) {
+ test_pointer_array(fd, prop->data.pointer);
+ array= prop->data.pointer;
- for(i=0; i<prop->len; i++)
- IDP_DirectLinkProperty(array[i], switch_endian, fd);
- }
- else if(prop->subtype == IDP_DOUBLE) {
+ for(i=0; i<prop->len; i++)
+ IDP_DirectLinkProperty(array[i], switch_endian, fd);
+ }
+ else if(prop->subtype == IDP_DOUBLE) {
+ if (switch_endian) {
for (i=0; i<prop->len; i++) {
SWITCH_LONGINT(((double*)prop->data.pointer)[i]);
}
- } else {
+ }
+ }
+ else {
+ if (switch_endian) {
for (i=0; i<prop->len; i++) {
SWITCH_INT(((int*)prop->data.pointer)[i]);
}
@@ -1564,33 +1605,6 @@ static PreviewImage *direct_link_preview_image(FileData *fd, PreviewImage *old_p
return prv;
}
-/* ************ READ SCRIPTLINK *************** */
-
-static void lib_link_scriptlink(FileData *fd, ID *id, ScriptLink *slink)
-{
- int i;
-
- for(i=0; i<slink->totscript; i++) {
- slink->scripts[i]= newlibadr(fd, id->lib, slink->scripts[i]);
- }
-}
-
-static void direct_link_scriptlink(FileData *fd, ScriptLink *slink)
-{
- slink->scripts= newdataadr(fd, slink->scripts);
- test_pointer_array(fd, (void **)&slink->scripts);
-
- slink->flag= newdataadr(fd, slink->flag);
-
- if(fd->flags & FD_FLAGS_SWITCH_ENDIAN) {
- int a;
-
- for(a=0; a<slink->totscript; a++) {
- SWITCH_SHORT(slink->flag[a]);
- }
- }
-}
-
/* ************ READ ANIMATION STUFF ***************** */
/* Legacy Data Support (for Version Patching) ----------------------------- */
@@ -1667,10 +1681,26 @@ static void lib_link_constraint_channels(FileData *fd, ID *id, ListBase *chanbas
/* Data Linking ----------------------------- */
+static void lib_link_fmodifiers(FileData *fd, ID *id, ListBase *list)
+{
+ FModifier *fcm;
+
+ for (fcm= list->first; fcm; fcm= fcm->next) {
+ /* data for specific modifiers */
+ switch (fcm->type) {
+ case FMODIFIER_TYPE_PYTHON:
+ {
+ FMod_Python *data= (FMod_Python *)fcm->data;
+ data->script = newlibadr(fd, id->lib, data->script);
+ }
+ break;
+ }
+ }
+}
+
static void lib_link_fcurves(FileData *fd, ID *id, ListBase *list)
{
FCurve *fcu;
- FModifier *fcm;
/* relink ID-block references... */
for (fcu= list->first; fcu; fcu= fcu->next) {
@@ -1684,16 +1714,45 @@ static void lib_link_fcurves(FileData *fd, ID *id, ListBase *list)
}
/* modifiers */
- for (fcm= fcu->modifiers.first; fcm; fcm= fcm->next) {
- /* data for specific modifiers */
- switch (fcm->type) {
- case FMODIFIER_TYPE_PYTHON:
- {
- FMod_Python *data= (FMod_Python *)fcm->data;
- data->script = newlibadr(fd, id->lib, data->script);
- }
- break;
+ lib_link_fmodifiers(fd, id, &fcu->modifiers);
+ }
+}
+
+
+/* NOTE: this assumes that link_list has already been called on the list */
+static void direct_link_fmodifiers(FileData *fd, ListBase *list)
+{
+ FModifier *fcm;
+
+ for (fcm= list->first; fcm; fcm= fcm->next) {
+ /* relink general data */
+ fcm->data = newdataadr(fd, fcm->data);
+ fcm->edata= NULL;
+
+ /* do relinking of data for specific types */
+ switch (fcm->type) {
+ case FMODIFIER_TYPE_GENERATOR:
+ {
+ FMod_Generator *data= (FMod_Generator *)fcm->data;
+
+ data->coefficients= newdataadr(fd, data->coefficients);
}
+ break;
+ case FMODIFIER_TYPE_ENVELOPE:
+ {
+ FMod_Envelope *data= (FMod_Envelope *)fcm->data;
+
+ data->data= newdataadr(fd, data->data);
+ }
+ break;
+ case FMODIFIER_TYPE_PYTHON:
+ {
+ FMod_Python *data= (FMod_Python *)fcm->data;
+
+ data->prop = newdataadr(fd, data->prop);
+ IDP_DirectLinkProperty(data->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
+ }
+ break;
}
}
}
@@ -1702,7 +1761,6 @@ static void lib_link_fcurves(FileData *fd, ID *id, ListBase *list)
static void direct_link_fcurves(FileData *fd, ListBase *list)
{
FCurve *fcu;
- FModifier *fcm;
/* link F-Curve data to F-Curve again (non ID-libs) */
for (fcu= list->first; fcu; fcu= fcu->next) {
@@ -1730,37 +1788,7 @@ static void direct_link_fcurves(FileData *fd, ListBase *list)
/* modifiers */
link_list(fd, &fcu->modifiers);
- for (fcm= fcu->modifiers.first; fcm; fcm= fcm->next) {
- /* relink general data */
- fcm->data = newdataadr(fd, fcm->data);
- fcm->edata= NULL;
-
- /* do relinking of data for specific types */
- switch (fcm->type) {
- case FMODIFIER_TYPE_GENERATOR:
- {
- FMod_Generator *data= (FMod_Generator *)fcm->data;
-
- data->coefficients= newdataadr(fd, data->coefficients);
- }
- break;
- case FMODIFIER_TYPE_ENVELOPE:
- {
- FMod_Envelope *data= (FMod_Envelope *)fcm->data;
-
- data->data= newdataadr(fd, data->data);
- }
- break;
- case FMODIFIER_TYPE_PYTHON:
- {
- FMod_Python *data= (FMod_Python *)fcm->data;
-
- data->prop = newdataadr(fd, data->prop);
- IDP_DirectLinkProperty(data->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
- }
- break;
- }
- }
+ direct_link_fmodifiers(fd, &fcu->modifiers);
}
}
@@ -1812,6 +1840,65 @@ static void direct_link_action(FileData *fd, bAction *act)
}
}
+static void lib_link_nladata_strips(FileData *fd, ID *id, ListBase *list)
+{
+ NlaStrip *strip;
+
+ for (strip= list->first; strip; strip= strip->next) {
+ /* check strip's children */
+ lib_link_nladata_strips(fd, id, &strip->strips);
+
+ /* reassign the counted-reference to action */
+ strip->act = newlibadr_us(fd, id->lib, strip->act);
+ }
+}
+
+static void lib_link_nladata(FileData *fd, ID *id, ListBase *list)
+{
+ NlaTrack *nlt;
+
+ /* we only care about the NLA strips inside the tracks */
+ for (nlt= list->first; nlt; nlt= nlt->next) {
+ lib_link_nladata_strips(fd, id, &nlt->strips);
+ }
+}
+
+/* This handles Animato NLA-Strips linking
+ * NOTE: this assumes that link_list has already been called on the list
+ */
+static void direct_link_nladata_strips(FileData *fd, ListBase *list)
+{
+ NlaStrip *strip;
+
+ for (strip= list->first; strip; strip= strip->next) {
+ /* strip's child strips */
+ link_list(fd, &strip->strips);
+ direct_link_nladata_strips(fd, &strip->strips);
+
+ /* strip's F-Curves */
+ link_list(fd, &strip->fcurves);
+ direct_link_fcurves(fd, &strip->fcurves);
+
+ /* strip's F-Modifiers */
+ link_list(fd, &strip->modifiers);
+ direct_link_fcurves(fd, &strip->modifiers);
+ }
+}
+
+/* NOTE: this assumes that link_list has already been called on the list */
+static void direct_link_nladata(FileData *fd, ListBase *list)
+{
+ NlaTrack *nlt;
+
+ for (nlt= list->first; nlt; nlt= nlt->next) {
+ /* relink list of strips */
+ link_list(fd, &nlt->strips);
+
+ /* relink strip data */
+ direct_link_nladata_strips(fd, &nlt->strips);
+ }
+}
+
/* ------- */
static void lib_link_keyingsets(FileData *fd, ID *id, ListBase *list)
@@ -1854,6 +1941,7 @@ static void lib_link_animdata(FileData *fd, ID *id, AnimData *adt)
/* link action data */
adt->action= newlibadr_us(fd, id->lib, adt->action);
+ adt->tmpact= newlibadr_us(fd, id->lib, adt->tmpact);
/* link drivers */
lib_link_fcurves(fd, id, &adt->drivers);
@@ -1861,7 +1949,7 @@ static void lib_link_animdata(FileData *fd, ID *id, AnimData *adt)
/* overrides don't have lib-link for now, so no need to do anything */
/* link NLA-data */
- // TODO...
+ lib_link_nladata(fd, id, &adt->nla_tracks);
}
static void direct_link_animdata(FileData *fd, AnimData *adt)
@@ -1878,7 +1966,12 @@ static void direct_link_animdata(FileData *fd, AnimData *adt)
// TODO...
/* link NLA-data */
- // TODO...
+ link_list(fd, &adt->nla_tracks);
+ direct_link_nladata(fd, &adt->nla_tracks);
+
+ /* clear temp pointers that may have been set... */
+ // TODO: it's probably only a small cost to reload this anyway...
+ adt->actstrip= NULL;
}
/* ************ READ NODE TREE *************** */
@@ -2091,6 +2184,8 @@ static void lib_link_constraints(FileData *fd, ID *id, ListBase *conlist)
data = ((bKinematicConstraint*)con->data);
data->tar = newlibadr(fd, id->lib, data->tar);
data->poletar = newlibadr(fd, id->lib, data->poletar);
+ con->lin_error = 0.f;
+ con->rot_error = 0.f;
}
break;
case CONSTRAINT_TYPE_TRACKTO:
@@ -2238,6 +2333,7 @@ static void lib_link_armature(FileData *fd, Main *main)
while(arm) {
if(arm->id.flag & LIB_NEEDLINK) {
+ if (arm->adt) lib_link_animdata(fd, &arm->id, arm->adt);
arm->id.flag -= LIB_NEEDLINK;
}
arm= arm->id.next;
@@ -2263,6 +2359,8 @@ static void direct_link_armature(FileData *fd, bArmature *arm)
link_list(fd, &arm->bonebase);
arm->edbo= NULL;
+ arm->sketch = NULL;
+ arm->adt= newdataadr(fd, arm->adt);
bone=arm->bonebase.first;
while (bone) {
@@ -2286,8 +2384,6 @@ static void lib_link_camera(FileData *fd, Main *main)
ca->dof_ob= newlibadr_us(fd, ca->id.lib, ca->dof_ob);
- lib_link_scriptlink(fd, &ca->id, &ca->scriptlink);
-
ca->id.flag -= LIB_NEEDLINK;
}
ca= ca->id.next;
@@ -2298,8 +2394,6 @@ static void direct_link_camera(FileData *fd, Camera *ca)
{
ca->adt= newdataadr(fd, ca->adt);
direct_link_animdata(fd, ca->adt);
-
- direct_link_scriptlink(fd, &ca->scriptlink);
}
@@ -2326,8 +2420,6 @@ static void lib_link_lamp(FileData *fd, Main *main)
la->ipo= newlibadr_us(fd, la->id.lib, la->ipo); // XXX depreceated - old animation system
- lib_link_scriptlink(fd, &la->id, &la->scriptlink);
-
la->id.flag -= LIB_NEEDLINK;
}
la= la->id.next;
@@ -2340,8 +2432,6 @@ static void direct_link_lamp(FileData *fd, Lamp *la)
la->adt= newdataadr(fd, la->adt);
direct_link_animdata(fd, la->adt);
-
- direct_link_scriptlink(fd, &la->scriptlink);
for(a=0; a<MAX_MTEX; a++) {
la->mtex[a]= newdataadr(fd, la->mtex[a]);
@@ -2441,7 +2531,8 @@ static void lib_link_mball(FileData *fd, Main *main)
mb= main->mball.first;
while(mb) {
if(mb->id.flag & LIB_NEEDLINK) {
-
+ if (mb->adt) lib_link_animdata(fd, &mb->id, mb->adt);
+
for(a=0; a<mb->totcol; a++) mb->mat[a]= newlibadr_us(fd, mb->id.lib, mb->mat[a]);
mb->ipo= newlibadr_us(fd, mb->id.lib, mb->ipo); // XXX depreceated - old animation system
@@ -2454,6 +2545,9 @@ static void lib_link_mball(FileData *fd, Main *main)
static void direct_link_mball(FileData *fd, MetaBall *mb)
{
+ mb->adt= newdataadr(fd, mb->adt);
+ direct_link_animdata(fd, mb->adt);
+
mb->mat= newdataadr(fd, mb->mat);
test_pointer_array(fd, (void **)&mb->mat);
@@ -2462,6 +2556,8 @@ static void direct_link_mball(FileData *fd, MetaBall *mb)
mb->disp.first= mb->disp.last= NULL;
mb->editelems= NULL;
mb->bb= NULL;
+/* mb->edit_elems.first= mb->edit_elems.last= NULL;*/
+ mb->lastelem= NULL;
}
/* ************ READ WORLD ***************** */
@@ -2487,8 +2583,6 @@ static void lib_link_world(FileData *fd, Main *main)
}
}
- lib_link_scriptlink(fd, &wrld->id, &wrld->scriptlink);
-
wrld->id.flag -= LIB_NEEDLINK;
}
wrld= wrld->id.next;
@@ -2501,8 +2595,6 @@ static void direct_link_world(FileData *fd, World *wrld)
wrld->adt= newdataadr(fd, wrld->adt);
direct_link_animdata(fd, wrld->adt);
-
- direct_link_scriptlink(fd, &wrld->scriptlink);
for(a=0; a<MAX_MTEX; a++) {
wrld->mtex[a]= newdataadr(fd, wrld->mtex[a]);
@@ -2641,6 +2733,7 @@ static void direct_link_image(FileData *fd, Image *ima)
ima->anim= NULL;
ima->rr= NULL;
ima->repbind= NULL;
+ ima->render_text= newdataadr(fd, ima->render_text);
ima->packedfile = direct_link_packedfile(fd, ima->packedfile);
ima->preview = direct_link_preview_image(fd, ima->preview);
@@ -2768,6 +2861,11 @@ static void lib_link_texture(FileData *fd, Main *main)
tex->ima= newlibadr_us(fd, tex->id.lib, tex->ima);
tex->ipo= newlibadr_us(fd, tex->id.lib, tex->ipo);
if(tex->env) tex->env->object= newlibadr(fd, tex->id.lib, tex->env->object);
+ if(tex->pd) {
+ tex->pd->object= newlibadr(fd, tex->id.lib, tex->pd->object);
+ tex->pd->psys= newlibadr(fd, tex->id.lib, tex->pd->psys);
+ }
+ if(tex->vd) tex->vd->object= newlibadr(fd, tex->id.lib, tex->vd->object);
if(tex->nodetree)
lib_link_ntree(fd, &tex->id, tex->nodetree);
@@ -2800,6 +2898,16 @@ static void direct_link_texture(FileData *fd, Tex *tex)
memset(tex->env->cube, 0, 6*sizeof(void *));
tex->env->ok= 0;
}
+ tex->pd= newdataadr(fd, tex->pd);
+ if(tex->pd) {
+ tex->pd->point_tree = NULL;
+ tex->pd->coba= newdataadr(fd, tex->pd->coba);
+ }
+
+ tex->vd= newdataadr(fd, tex->vd);
+ if(tex->vd) {
+ tex->vd->dataset = NULL;
+ }
tex->nodetree= newdataadr(fd, tex->nodetree);
if(tex->nodetree)
@@ -2839,7 +2947,6 @@ static void lib_link_material(FileData *fd, Main *main)
mtex->object= newlibadr(fd, ma->id.lib, mtex->object);
}
}
- lib_link_scriptlink(fd, &ma->id, &ma->scriptlink);
if(ma->nodetree)
lib_link_ntree(fd, &ma->id, ma->nodetree);
@@ -2864,8 +2971,6 @@ static void direct_link_material(FileData *fd, Material *ma)
ma->ramp_col= newdataadr(fd, ma->ramp_col);
ma->ramp_spec= newdataadr(fd, ma->ramp_spec);
- direct_link_scriptlink(fd, &ma->scriptlink);
-
ma->nodetree= newdataadr(fd, ma->nodetree);
if(ma->nodetree)
direct_link_nodetree(fd, ma->nodetree);
@@ -2880,16 +2985,49 @@ static void direct_link_pointcache(FileData *fd, PointCache *cache)
{
if((cache->flag & PTCACHE_DISK_CACHE)==0) {
PTCacheMem *pm;
+ int i;
link_list(fd, &cache->mem_cache);
pm = cache->mem_cache.first;
- for(; pm; pm=pm->next)
- pm->data = newdataadr(fd, pm->data);
+ for(; pm; pm=pm->next) {
+ if(pm->index_array)
+ pm->index_array = newdataadr(fd, pm->index_array);
+
+ for(i=0; i<BPHYS_TOT_DATA; i++) {
+ if(pm->data[i] && pm->data_types & (1<<i))
+ pm->data[i] = newdataadr(fd, pm->data[i]);
+ }
+ }
}
- cache->flag &= ~(PTCACHE_SIMULATION_VALID|PTCACHE_BAKE_EDIT_ACTIVE);
+ else
+ cache->mem_cache.first = cache->mem_cache.last = NULL;
+
+ cache->flag &= ~PTCACHE_SIMULATION_VALID;
cache->simframe= 0;
+ cache->edit= NULL;
+ cache->free_edit= NULL;
+}
+
+static void direct_link_pointcache_list(FileData *fd, ListBase *ptcaches, PointCache **ocache)
+{
+ PointCache *cache;
+
+ if(ptcaches->first) {
+ link_list(fd, ptcaches);
+ for(cache=ptcaches->first; cache; cache=cache->next)
+ direct_link_pointcache(fd, cache);
+
+ *ocache = newdataadr(fd, *ocache);
+ }
+ else if(*ocache) {
+ /* old "single" caches need to be linked too */
+ *ocache = newdataadr(fd, *ocache);
+ direct_link_pointcache(fd, *ocache);
+
+ ptcaches->first = ptcaches->last = *ocache;
+ }
}
static void lib_link_particlesettings(FileData *fd, Main *main)
@@ -2906,6 +3044,29 @@ static void lib_link_particlesettings(FileData *fd, Main *main)
part->dup_group = newlibadr(fd, part->id.lib, part->dup_group);
part->eff_group = newlibadr(fd, part->id.lib, part->eff_group);
part->bb_ob = newlibadr(fd, part->id.lib, part->bb_ob);
+ if(part->boids) {
+ BoidState *state = part->boids->states.first;
+ BoidRule *rule;
+ for(; state; state=state->next) {
+ rule = state->rules.first;
+ for(; rule; rule=rule->next)
+ switch(rule->type) {
+ case eBoidRuleType_Goal:
+ case eBoidRuleType_Avoid:
+ {
+ BoidRuleGoalAvoid *brga = (BoidRuleGoalAvoid*)rule;
+ brga->ob = newlibadr(fd, part->id.lib, brga->ob);
+ break;
+ }
+ case eBoidRuleType_FollowLeader:
+ {
+ BoidRuleFollowLeader *brfl = (BoidRuleFollowLeader*)rule;
+ brfl->ob = newlibadr(fd, part->id.lib, brfl->ob);
+ break;
+ }
+ }
+ }
+ }
part->id.flag -= LIB_NEEDLINK;
}
part= part->id.next;
@@ -2917,26 +3078,36 @@ static void direct_link_particlesettings(FileData *fd, ParticleSettings *part)
part->adt= newdataadr(fd, part->adt);
part->pd= newdataadr(fd, part->pd);
part->pd2= newdataadr(fd, part->pd2);
+
+ part->boids= newdataadr(fd, part->boids);
+
+ if(part->boids) {
+ BoidState *state;
+ link_list(fd, &part->boids->states);
+
+ for(state=part->boids->states.first; state; state=state->next) {
+ link_list(fd, &state->rules);
+ link_list(fd, &state->conditions);
+ link_list(fd, &state->actions);
+ }
+ }
}
static void lib_link_particlesystems(FileData *fd, Object *ob, ID *id, ListBase *particles)
{
ParticleSystem *psys, *psysnext;
- int a;
for(psys=particles->first; psys; psys=psysnext){
- ParticleData *pa;
-
psysnext= psys->next;
psys->part = newlibadr_us(fd, id->lib, psys->part);
if(psys->part) {
- psys->target_ob = newlibadr(fd, id->lib, psys->target_ob);
- psys->keyed_ob = newlibadr(fd, id->lib, psys->keyed_ob);
+ ParticleTarget *pt = psys->targets.first;
- for(a=0,pa=psys->particles; a<psys->totpart; a++,pa++){
- pa->stick_ob=newlibadr(fd, id->lib, pa->stick_ob);
- }
+ for(; pt; pt=pt->next)
+ pt->ob=newlibadr(fd, id->lib, pt->ob);
+
+ psys->target_ob = newlibadr(fd, id->lib, psys->target_ob);
}
else {
/* particle modifier must be removed before particle system */
@@ -2952,51 +3123,73 @@ static void lib_link_particlesystems(FileData *fd, Object *ob, ID *id, ListBase
static void direct_link_particlesystems(FileData *fd, ListBase *particles)
{
ParticleSystem *psys;
+ ParticleData *pa;
int a;
for(psys=particles->first; psys; psys=psys->next) {
psys->particles=newdataadr(fd,psys->particles);
+
if(psys->particles && psys->particles->hair){
- ParticleData *pa = psys->particles;
- for(a=0; a<psys->totpart; a++, pa++)
+ for(a=0,pa=psys->particles; a<psys->totpart; a++, pa++)
pa->hair=newdataadr(fd,pa->hair);
}
+
if(psys->particles && psys->particles->keys){
- ParticleData *pa = psys->particles;
- for(a=0; a<psys->totpart; a++, pa++) {
+ for(a=0,pa=psys->particles; a<psys->totpart; a++, pa++) {
pa->keys= NULL;
pa->totkey= 0;
}
psys->flag &= ~PSYS_KEYED;
}
+
+ if(psys->particles && psys->particles->boid) {
+ pa = psys->particles;
+ pa->boid = newdataadr(fd, pa->boid);
+ for(a=1,pa++; a<psys->totpart; a++, pa++)
+ pa->boid = (pa-1)->boid + 1;
+ }
+ else {
+ for(a=0,pa=psys->particles; a<psys->totpart; a++, pa++)
+ pa->boid = NULL;
+ }
+
+
psys->child=newdataadr(fd,psys->child);
psys->effectors.first=psys->effectors.last=0;
- psys->soft= newdataadr(fd, psys->soft);
- if(psys->soft) {
- SoftBody *sb = psys->soft;
- sb->particles = psys;
- sb->bpoint= NULL; // init pointers so it gets rebuilt nicely
- sb->bspring= NULL;
- sb->scratch= NULL;
+ link_list(fd, &psys->targets);
- sb->pointcache= newdataadr(fd, sb->pointcache);
- if(sb->pointcache)
- direct_link_pointcache(fd, sb->pointcache);
- }
-
- psys->edit = 0;
+ psys->edit = NULL;
psys->free_edit = NULL;
psys->pathcache = 0;
psys->childcache = 0;
psys->pathcachebufs.first = psys->pathcachebufs.last = 0;
psys->childcachebufs.first = psys->childcachebufs.last = 0;
psys->reactevents.first = psys->reactevents.last = 0;
+ psys->frand = NULL;
+ psys->pdd = NULL;
+
+ direct_link_pointcache_list(fd, &psys->ptcaches, &psys->pointcache);
+
+ if(psys->clmd) {
+ psys->clmd = newdataadr(fd, psys->clmd);
+ psys->clmd->clothObject = NULL;
+
+ psys->clmd->sim_parms= newdataadr(fd, psys->clmd->sim_parms);
+ psys->clmd->coll_parms= newdataadr(fd, psys->clmd->coll_parms);
+
+ if(psys->clmd->sim_parms) {
+ if(psys->clmd->sim_parms->presets > 10)
+ psys->clmd->sim_parms->presets = 0;
+ }
+
+ psys->hair_in_dm = psys->hair_out_dm = NULL;
- psys->pointcache= newdataadr(fd, psys->pointcache);
- if(psys->pointcache)
- direct_link_pointcache(fd, psys->pointcache);
+ psys->clmd->point_cache = psys->pointcache;
+ }
+
+ psys->tree = NULL;
}
return;
}
@@ -3294,11 +3487,13 @@ static void lib_link_object(FileData *fd, Main *main)
if(ob->pose) {
free_pose(ob->pose);
ob->pose= NULL;
- ob->flag &= ~OB_POSEMODE;
+ ob->mode &= ~OB_MODE_POSE;
}
}
for(a=0; a<ob->totcol; a++) ob->mat[a]= newlibadr_us(fd, ob->id.lib, ob->mat[a]);
+ ob->gpd= newlibadr_us(fd, ob->id.lib, ob->gpd);
+
ob->id.flag -= LIB_NEEDLINK;
/* if id.us==0 a new base will be created later on */
@@ -3355,9 +3550,6 @@ static void lib_link_object(FileData *fd, Main *main)
bSoundActuator *sa= act->data;
sa->sound= newlibadr_us(fd, ob->id.lib, sa->sound);
}
- else if(act->type==ACT_CD) {
- /* bCDActuator *cda= act->data; */
- }
else if(act->type==ACT_GAME) {
/* bGameActuator *ga= act->data; */
}
@@ -3425,6 +3617,11 @@ static void lib_link_object(FileData *fd, Main *main)
else if(act->type==ACT_STATE) {
/* bStateActuator *statea = act->data; */
}
+ else if(act->type==ACT_ARMATURE) {
+ bArmatureActuator *arma= act->data;
+ arma->target= newlibadr(fd, ob->id.lib, arma->target);
+ arma->subtarget= newlibadr(fd, ob->id.lib, arma->subtarget);
+ }
act= act->next;
}
@@ -3434,13 +3631,23 @@ static void lib_link_object(FileData *fd, Main *main)
if(fluidmd && fluidmd->fss)
fluidmd->fss->ipo = newlibadr_us(fd, ob->id.lib, fluidmd->fss->ipo);
}
+
+ {
+ SmokeModifierData *smd = (SmokeModifierData *)modifiers_findByType(ob, eModifierType_Smoke);
+
+ if(smd && smd->type == MOD_SMOKE_TYPE_DOMAIN && smd->domain)
+ {
+ smd->domain->coll_group = newlibadr_us(fd, ob->id.lib, smd->domain->coll_group);
+ smd->domain->eff_group = newlibadr_us(fd, ob->id.lib, smd->domain->eff_group);
+ smd->domain->fluid_group = newlibadr_us(fd, ob->id.lib, smd->domain->fluid_group);
+ }
+ }
/* texture field */
if(ob->pd)
if(ob->pd->tex)
ob->pd->tex=newlibadr_us(fd, ob->id.lib, ob->pd->tex);
- lib_link_scriptlink(fd, &ob->id, &ob->scriptlink);
lib_link_particlesystems(fd, ob, &ob->id, &ob->particlesystem);
lib_link_modifiers(fd, ob);
}
@@ -3476,6 +3683,10 @@ static void direct_link_pose(FileData *fd, bPose *pose)
pchan->iktree.first= pchan->iktree.last= NULL;
pchan->path= NULL;
}
+ pose->ikdata = NULL;
+ if (pose->ikparam != NULL) {
+ pose->ikparam= newdataadr(fd, pose->ikparam);
+ }
}
static void direct_link_modifiers(FileData *fd, ListBase *lb)
@@ -3509,10 +3720,8 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb)
clmd->sim_parms= newdataadr(fd, clmd->sim_parms);
clmd->coll_parms= newdataadr(fd, clmd->coll_parms);
- clmd->point_cache= newdataadr(fd, clmd->point_cache);
- if(clmd->point_cache)
- direct_link_pointcache(fd, clmd->point_cache);
+ direct_link_pointcache_list(fd, &clmd->ptcaches, &clmd->point_cache);
if(clmd->sim_parms) {
if(clmd->sim_parms->presets > 10)
@@ -3526,6 +3735,46 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb)
fluidmd->fss= newdataadr(fd, fluidmd->fss);
fluidmd->fss->meshSurfNormals = 0;
}
+ else if (md->type==eModifierType_Smoke) {
+ SmokeModifierData *smd = (SmokeModifierData*) md;
+
+ if(smd->type==MOD_SMOKE_TYPE_DOMAIN)
+ {
+ smd->flow = NULL;
+ smd->coll = NULL;
+ smd->domain = newdataadr(fd, smd->domain);
+ smd->domain->smd = smd;
+
+ smd->domain->fluid = NULL;
+ smd->domain->wt = NULL;
+ smd->domain->shadow = NULL;
+ smd->domain->tex = NULL;
+ smd->domain->tex_shadow = NULL;
+ smd->domain->tex_wt = NULL;
+
+ direct_link_pointcache_list(fd, &(smd->domain->ptcaches[0]), &(smd->domain->point_cache[0]));
+ direct_link_pointcache_list(fd, &(smd->domain->ptcaches[1]), &(smd->domain->point_cache[1]));
+ }
+ else if(smd->type==MOD_SMOKE_TYPE_FLOW)
+ {
+ smd->domain = NULL;
+ smd->coll = NULL;
+ smd->flow = newdataadr(fd, smd->flow);
+ smd->flow->smd = smd;
+ smd->flow->psys = newdataadr(fd, smd->flow->psys);
+ }
+ else if(smd->type==MOD_SMOKE_TYPE_COLL)
+ {
+ smd->flow = NULL;
+ smd->domain = NULL;
+ smd->coll = NULL;
+ /*
+ smd->coll = newdataadr(fd, smd->coll);
+ smd->coll->points = NULL;
+ smd->coll->numpoints = 0;
+ */
+ }
+ }
else if (md->type==eModifierType_Collision) {
CollisionModifierData *collmd = (CollisionModifierData*) md;
@@ -3557,6 +3806,9 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb)
surmd->dm = NULL;
surmd->bvhtree = NULL;
+ surmd->x = NULL;
+ surmd->v = NULL;
+ surmd->numverts = 0;
}
else if (md->type==eModifierType_Hook) {
HookModifierData *hmd = (HookModifierData*) md;
@@ -3637,10 +3889,9 @@ static void direct_link_object(FileData *fd, Object *ob)
link_list(fd, &ob->constraintChannels);
// >>> XXX depreceated - old animation system
- direct_link_scriptlink(fd, &ob->scriptlink);
-
ob->mat= newdataadr(fd, ob->mat);
test_pointer_array(fd, (void **)&ob->mat);
+ ob->matbits= newdataadr(fd, ob->matbits);
/* do it here, below old data gets converted */
direct_link_modifiers(fd, &ob->modifiers);
@@ -3714,9 +3965,7 @@ static void direct_link_object(FileData *fd, Object *ob)
}
}
- sb->pointcache= newdataadr(fd, sb->pointcache);
- if(sb->pointcache)
- direct_link_pointcache(fd, sb->pointcache);
+ direct_link_pointcache_list(fd, &sb->ptcaches, &sb->pointcache);
}
ob->bsoft= newdataadr(fd, ob->bsoft);
ob->fluidsimSettings= newdataadr(fd, ob->fluidsimSettings); /* NT */
@@ -3802,6 +4051,10 @@ static void direct_link_object(FileData *fd, Object *ob)
ob->derivedDeform= NULL;
ob->derivedFinal= NULL;
ob->gpulamp.first= ob->gpulamp.last= NULL;
+ link_list(fd, &ob->pc_ids);
+
+ if(ob->sculpt)
+ ob->sculpt= MEM_callocN(sizeof(SculptSession), "reload sculpt session");
}
/* ************ READ SCENE ***************** */
@@ -3816,6 +4069,14 @@ static void composite_patch(bNodeTree *ntree, Scene *scene)
node->id= &scene->id;
}
+static void link_paint(FileData *fd, Scene *sce, Paint *p)
+{
+ if(p && p->brushes) {
+ int i;
+ for(i = 0; i < p->brush_count; ++i)
+ p->brushes[i]= newlibadr_us(fd, sce->id.lib, p->brushes[i]);
+ }
+}
static void lib_link_scene(FileData *fd, Main *main)
{
@@ -3838,19 +4099,13 @@ static void lib_link_scene(FileData *fd, Main *main)
sce->world= newlibadr_us(fd, sce->id.lib, sce->world);
sce->set= newlibadr(fd, sce->id.lib, sce->set);
sce->ima= newlibadr_us(fd, sce->id.lib, sce->ima);
+ sce->gpd= newlibadr_us(fd, sce->id.lib, sce->gpd);
- sce->toolsettings->imapaint.brush=
- newlibadr_us(fd, sce->id.lib, sce->toolsettings->imapaint.brush);
- if(sce->toolsettings->sculpt)
- sce->toolsettings->sculpt->brush=
- newlibadr_us(fd, sce->id.lib, sce->toolsettings->sculpt->brush);
- if(sce->toolsettings->vpaint)
- sce->toolsettings->vpaint->brush=
- newlibadr_us(fd, sce->id.lib, sce->toolsettings->vpaint->brush);
- if(sce->toolsettings->wpaint)
- sce->toolsettings->wpaint->brush=
- newlibadr_us(fd, sce->id.lib, sce->toolsettings->wpaint->brush);
-
+ link_paint(fd, sce, &sce->toolsettings->sculpt->paint);
+ link_paint(fd, sce, &sce->toolsettings->vpaint->paint);
+ link_paint(fd, sce, &sce->toolsettings->wpaint->paint);
+ link_paint(fd, sce, &sce->toolsettings->imapaint.paint);
+
sce->toolsettings->skgen_template = newlibadr(fd, sce->id.lib, sce->toolsettings->skgen_template);
for(base= sce->base.first; base; base= next) {
@@ -3879,19 +4134,19 @@ static void lib_link_scene(FileData *fd, Main *main)
if(seq->ipo) seq->ipo= newlibadr_us(fd, sce->id.lib, seq->ipo);
if(seq->scene) seq->scene= newlibadr(fd, sce->id.lib, seq->scene);
if(seq->sound) {
- seq->sound= newlibadr(fd, sce->id.lib, seq->sound);
+ if(seq->type == SEQ_HD_SOUND)
+ seq->type = SEQ_SOUND;
+ else
+ seq->sound= newlibadr(fd, sce->id.lib, seq->sound);
if (seq->sound) {
seq->sound->id.us++;
- seq->sound->flags |= SOUND_FLAGS_SEQUENCE;
+ seq->sound_handle= sound_new_handle(sce, seq->sound, seq->startdisp, seq->enddisp, seq->startofs);
}
}
seq->anim= 0;
- seq->hdaudio = 0;
}
SEQ_END
- lib_link_scriptlink(fd, &sce->id, &sce->scriptlink);
-
if(sce->nodetree) {
lib_link_ntree(fd, &sce->id, sce->nodetree);
composite_patch(sce->nodetree, sce);
@@ -3902,7 +4157,8 @@ static void lib_link_scene(FileData *fd, Main *main)
srl->light_override= newlibadr_us(fd, sce->id.lib, srl->light_override);
}
/*Game Settings: Dome Warp Text*/
- sce->r.dometext= newlibadr_us(fd, sce->id.lib, sce->r.dometext);
+// sce->r.dometext= newlibadr_us(fd, sce->id.lib, sce->r.dometext); // XXX deprecated since 2.5
+ sce->gm.dome.warptext= newlibadr_us(fd, sce->id.lib, sce->gm.dome.warptext);
sce->id.flag -= LIB_NEEDLINK;
}
@@ -3922,6 +4178,13 @@ static void link_recurs_seq(FileData *fd, ListBase *lb)
link_recurs_seq(fd, &seq->seqbase);
}
+static void direct_link_paint(FileData *fd, Paint **paint)
+{
+ (*paint)= newdataadr(fd, (*paint));
+ if(*paint)
+ (*paint)->brushes= newdataadr(fd, (*paint)->brushes);
+}
+
static void direct_link_scene(FileData *fd, Scene *sce)
{
Editing *ed;
@@ -3931,7 +4194,10 @@ static void direct_link_scene(FileData *fd, Scene *sce)
sce->theDag = NULL;
sce->dagisvalid = 0;
sce->obedit= NULL;
-
+ sce->stats= 0;
+
+ memset(&sce->sound_handles, 0, sizeof(sce->sound_handles));
+
/* set users to one by default, not in lib-link, this will increase it for compo nodes */
sce->id.us= 1;
@@ -3947,14 +4213,14 @@ static void direct_link_scene(FileData *fd, Scene *sce)
sce->toolsettings= newdataadr(fd, sce->toolsettings);
if(sce->toolsettings) {
- sce->toolsettings->vpaint= newdataadr(fd, sce->toolsettings->vpaint);
- sce->toolsettings->wpaint= newdataadr(fd, sce->toolsettings->wpaint);
- sce->toolsettings->sculpt= newdataadr(fd, sce->toolsettings->sculpt);
+ direct_link_paint(fd, (Paint**)&sce->toolsettings->sculpt);
+ direct_link_paint(fd, (Paint**)&sce->toolsettings->vpaint);
+ direct_link_paint(fd, (Paint**)&sce->toolsettings->wpaint);
+
+ sce->toolsettings->imapaint.paint.brushes= newdataadr(fd, sce->toolsettings->imapaint.paint.brushes);
+
sce->toolsettings->imapaint.paintcursor= NULL;
sce->toolsettings->particle.paintcursor= NULL;
-
- if(sce->toolsettings->sculpt)
- sce->toolsettings->sculpt->session= MEM_callocN(sizeof(SculptSession), "reload sculpt session");
}
if(sce->ed) {
@@ -4023,6 +4289,9 @@ static void direct_link_scene(FileData *fd, Scene *sce)
} else {
seq->strip->color_balance = 0;
}
+ if (seq->strip->color_balance) {
+ // seq->strip->color_balance->gui = 0; // XXX - peter, is this relevant in 2.5?
+ }
}
}
SEQ_END
@@ -4066,8 +4335,6 @@ static void direct_link_scene(FileData *fd, Scene *sce)
}
}
}
-
- direct_link_scriptlink(fd, &sce->scriptlink);
sce->r.avicodecdata = newdataadr(fd, sce->r.avicodecdata);
if (sce->r.avicodecdata) {
@@ -4117,6 +4384,7 @@ static void direct_link_windowmanager(FileData *fd, wmWindowManager *wm)
win->timers.first= win->timers.last= NULL;
win->queue.first= win->queue.last= NULL;
win->handlers.first= win->handlers.last= NULL;
+ win->modalhandlers.first= win->modalhandlers.last= NULL;
win->subwindows.first= win->subwindows.last= NULL;
win->gesture.first= win->gesture.last= NULL;
@@ -4129,7 +4397,9 @@ static void direct_link_windowmanager(FileData *fd, wmWindowManager *wm)
wm->keymaps.first= wm->keymaps.last= NULL;
wm->paintcursors.first= wm->paintcursors.last= NULL;
wm->queue.first= wm->queue.last= NULL;
- wm->reports.first= wm->reports.last= NULL;
+ BKE_reports_init(&wm->reports, RPT_STORE);
+
+ wm->jobs.first= wm->jobs.last= NULL;
wm->windrawable= NULL;
wm->initialized= 0;
@@ -4138,11 +4408,14 @@ static void direct_link_windowmanager(FileData *fd, wmWindowManager *wm)
static void lib_link_windowmanager(FileData *fd, Main *main)
{
wmWindowManager *wm;
+ wmWindow *win;
for(wm= main->wm.first; wm; wm= wm->id.next) {
- wmWindow *win;
- for(win= wm->windows.first; win; win= win->next) {
- win->screen= newlibadr(fd, NULL, win->screen);
+ if(wm->id.flag & LIB_NEEDLINK) {
+ for(win= wm->windows.first; win; win= win->next)
+ win->screen= newlibadr(fd, NULL, win->screen);
+
+ wm->id.flag -= LIB_NEEDLINK;
}
}
}
@@ -4220,9 +4493,6 @@ static void lib_link_screen(FileData *fd, Main *main)
sa->full= newlibadr(fd, sc->id.lib, sa->full);
- /* space handler scriptlinks */
- lib_link_scriptlink(fd, &sc->id, &sa->scriptlink);
-
for (sl= sa->spacedata.first; sl; sl= sl->next) {
if(sl->spacetype==SPACE_VIEW3D) {
View3D *v3d= (View3D*) sl;
@@ -4245,9 +4515,10 @@ static void lib_link_screen(FileData *fd, Main *main)
}
else if(sl->spacetype==SPACE_BUTS) {
SpaceButs *sbuts= (SpaceButs *)sl;
- sbuts->lockpoin= NULL;
sbuts->ri= NULL;
sbuts->pinid= newlibadr(fd, sc->id.lib, sbuts->pinid);
+ sbuts->mainbo= sbuts->mainb;
+ sbuts->mainbuser= sbuts->mainb;
if(main->versionfile<132)
butspace_version_132(sbuts);
}
@@ -4257,6 +4528,8 @@ static void lib_link_screen(FileData *fd, Main *main)
sfile->params= NULL;
sfile->op= NULL;
sfile->layout= NULL;
+ sfile->folders_prev= NULL;
+ sfile->folders_next= NULL;
}
else if(sl->spacetype==SPACE_IMASEL) {
SpaceImaSel *simasel= (SpaceImaSel *)sl;
@@ -4399,16 +4672,6 @@ void lib_link_screen_restore(Main *newmain, bScreen *curscreen, Scene *curscene)
while(sa) {
SpaceLink *sl;
- if (sa->scriptlink.totscript) {
- /* restore screen area script links */
- ScriptLink *slink = &sa->scriptlink;
- int script_idx;
- for (script_idx = 0; script_idx < slink->totscript; script_idx++) {
- slink->scripts[script_idx] = restore_pointer_by_name(newmain,
- (ID *)slink->scripts[script_idx], 1);
- }
- }
-
for (sl= sa->spacedata.first; sl; sl= sl->next) {
if(sl->spacetype==SPACE_VIEW3D) {
View3D *v3d= (View3D*) sl;
@@ -4436,7 +4699,6 @@ void lib_link_screen_restore(Main *newmain, bScreen *curscreen, Scene *curscene)
v3d->layact= v3d->localvd->layact;
MEM_freeN(v3d->localvd);
v3d->localvd= NULL;
- v3d->localview= 0;
}
*/
}
@@ -4464,7 +4726,6 @@ void lib_link_screen_restore(Main *newmain, bScreen *curscreen, Scene *curscene)
}
else if(sl->spacetype==SPACE_BUTS) {
SpaceButs *sbuts= (SpaceButs *)sl;
- sbuts->lockpoin= NULL;
sbuts->pinid = restore_pointer_by_name(newmain, sbuts->pinid, 0);
//XXX if (sbuts->ri) sbuts->ri->curtile = 0;
}
@@ -4472,13 +4733,10 @@ void lib_link_screen_restore(Main *newmain, bScreen *curscreen, Scene *curscene)
SpaceFile *sfile= (SpaceFile *)sl;
sfile->files= NULL;
+ sfile->folders_prev= NULL;
+ sfile->folders_next= NULL;
sfile->params= NULL;
sfile->op= NULL;
- /* XXX needs checking - best solve in filesel itself
- if(sfile->libfiledata)
- BLO_blendhandle_close(sfile->libfiledata);
- sfile->libfiledata= 0;
- */
}
else if(sl->spacetype==SPACE_IMASEL) {
SpaceImaSel *simasel= (SpaceImaSel *)sl;
@@ -4583,10 +4841,12 @@ static void direct_link_region(FileData *fd, ARegion *ar, int spacetype)
rv3d->ri= NULL;
rv3d->sms= NULL;
rv3d->smooth_timer= NULL;
- rv3d->lastmode= 0;
}
}
+ ar->v2d.tab_offset= NULL;
+ ar->v2d.tab_num= 0;
+ ar->v2d.tab_cur= 0;
ar->handlers.first= ar->handlers.last= NULL;
ar->uiblocks.first= ar->uiblocks.last= NULL;
ar->headerstr= NULL;
@@ -4615,6 +4875,10 @@ static void view3d_split_250(View3D *v3d, ListBase *regions)
QUATCOPY(rv3d->viewquat, v3d->viewquat);
}
}
+
+ /* this was not initialized correct always */
+ if(v3d->twtype == 0)
+ v3d->twtype= V3D_MANIP_TRANSLATE;
}
static void direct_link_screen(FileData *fd, bScreen *sc)
@@ -4710,6 +4974,11 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
sipo->ads= newdataadr(fd, sipo->ads);
sipo->ghostCurves.first= sipo->ghostCurves.last= NULL;
}
+ else if (sl->spacetype==SPACE_NLA) {
+ SpaceNla *snla= (SpaceNla*)sl;
+
+ snla->ads= newdataadr(fd, snla->ads);
+ }
else if (sl->spacetype==SPACE_OUTLINER) {
SpaceOops *soops= (SpaceOops*) sl;
@@ -4744,7 +5013,7 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
}
else if(sl->spacetype==SPACE_LOGIC) {
SpaceLogic *slogic= (SpaceLogic *)sl;
-
+
if(slogic->gpd) {
slogic->gpd= newdataadr(fd, slogic->gpd);
direct_link_gpencil(fd, slogic->gpd);
@@ -4761,6 +5030,20 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
SpaceButs *sbuts= (SpaceButs *)sl;
sbuts->path= NULL;
}
+ else if(sl->spacetype==SPACE_CONSOLE) {
+ SpaceConsole *sconsole= (SpaceConsole *)sl;
+ //ConsoleLine *cl;
+
+ link_list(fd, &sconsole->scrollback);
+ link_list(fd, &sconsole->history);
+
+ //for(cl= sconsole->scrollback.first; cl; cl= cl->next)
+ // cl->line= newdataadr(fd, cl->line);
+
+ //for(cl= sconsole->history.first; cl; cl= cl->next)
+ // cl->line= newdataadr(fd, cl->line);
+
+ }
}
sa->actionzones.first= sa->actionzones.last= NULL;
@@ -4769,9 +5052,6 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
sa->v2= newdataadr(fd, sa->v2);
sa->v3= newdataadr(fd, sa->v3);
sa->v4= newdataadr(fd, sa->v4);
-
- /* space handler scriptlinks */
- direct_link_scriptlink(fd, &sa->scriptlink);
}
}
@@ -4844,8 +5124,7 @@ static void fix_relpaths_library(const char *basepath, Main *main)
static void direct_link_sound(FileData *fd, bSound *sound)
{
- sound->sample = NULL;
- sound->snd_sound = NULL;
+ sound->handle = NULL;
sound->packedfile = direct_link_packedfile(fd, sound->packedfile);
sound->newpackedfile = direct_link_packedfile(fd, sound->newpackedfile);
@@ -4860,7 +5139,11 @@ static void lib_link_sound(FileData *fd, Main *main)
if(sound->id.flag & LIB_NEEDLINK) {
sound->id.flag -= LIB_NEEDLINK;
sound->ipo= newlibadr_us(fd, sound->id.lib, sound->ipo); // XXX depreceated - old animation system
- sound->stream = 0;
+
+ sound_load(main, sound);
+
+ if(sound->cache)
+ sound_cache(sound, 1);
}
sound= sound->id.next;
}
@@ -5131,6 +5414,9 @@ static BHead *read_global(BlendFileData *bfd, FileData *fd, BHead *bhead)
bfd->curscene= fg->curscene;
MEM_freeN(fg);
+
+ fd->globalf= bfd->globalf;
+ fd->fileflags= bfd->fileflags;
return blo_nextbhead(fd, bhead);
}
@@ -5522,7 +5808,7 @@ static void alphasort_version_246(FileData *fd, Library *lib, Mesh *me)
tf = ((MTFace*)me->fdata.layers[b].data) + a;
tf->mode &= ~TF_ALPHASORT;
- if(ma && (ma->mode & MA_ZTRA))
+ if(ma && (ma->mode & MA_ZTRANSP))
if(ELEM(tf->transp, TF_ALPHA, TF_ADD) || (texalpha && (tf->transp != TF_CLIP)))
tf->mode |= TF_ALPHASORT;
}
@@ -5544,7 +5830,7 @@ static void area_add_header_region(ScrArea *sa, ListBase *lb)
/* initialise view2d data for header region, to allow panning */
/* is copy from ui_view2d.c */
- ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_KEEPZOOM|V2D_KEEPASPECT);
+ ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_LIMITZOOM|V2D_KEEPASPECT);
ar->v2d.keepofs = V2D_LOCKOFS_Y;
ar->v2d.keeptot = V2D_KEEPTOT_STRICT;
ar->v2d.align = V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_NEG_Y;
@@ -5565,6 +5851,14 @@ static void area_add_window_regions(ScrArea *sa, SpaceLink *sl, ListBase *lb)
ar->regiontype= RGN_TYPE_CHANNELS;
ar->alignment= RGN_ALIGN_LEFT;
ar->v2d.scroll= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM);
+
+ // for some reason, this doesn't seem to go auto like for NLA...
+ ar= MEM_callocN(sizeof(ARegion), "area region from do_versions");
+ BLI_addtail(lb, ar);
+ ar->regiontype= RGN_TYPE_UI;
+ ar->alignment= RGN_ALIGN_RIGHT;
+ ar->v2d.scroll= V2D_SCROLL_RIGHT;
+ ar->v2d.flag = RGN_FLAG_HIDDEN;
break;
case SPACE_ACTION:
@@ -5595,21 +5889,17 @@ static void area_add_window_regions(ScrArea *sa, SpaceLink *sl, ListBase *lb)
/* temporarily hide it */
ar->flag = RGN_FLAG_HIDDEN;
break;
-
case SPACE_FILE:
- /* channel (bookmarks/directories) region */
- ar= MEM_callocN(sizeof(ARegion), "area region from do_versions");
+ ar= MEM_callocN(sizeof(ARegion), "nodetree area for node");
BLI_addtail(lb, ar);
ar->regiontype= RGN_TYPE_CHANNELS;
ar->alignment= RGN_ALIGN_LEFT;
- ar->v2d.scroll= V2D_SCROLL_RIGHT;
- /* button UI region */
- ar= MEM_callocN(sizeof(ARegion), "area region from do_versions");
+
+ ar= MEM_callocN(sizeof(ARegion), "ui area for file");
BLI_addtail(lb, ar);
ar->regiontype= RGN_TYPE_UI;
ar->alignment= RGN_ALIGN_TOP;
break;
-
#if 0
case SPACE_BUTS:
/* context UI region */
@@ -5741,13 +6031,15 @@ static void area_add_window_regions(ScrArea *sa, SpaceLink *sl, ListBase *lb)
memcpy(&ar->v2d, &snode->v2d, sizeof(View2D));
ar->v2d.scroll= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM);
- ar->v2d.keepzoom= V2D_KEEPZOOM|V2D_KEEPASPECT;
+ ar->v2d.keepzoom= V2D_LIMITZOOM|V2D_KEEPASPECT;
break;
}
case SPACE_BUTS:
{
SpaceButs *sbuts= (SpaceButs *)sl;
memcpy(&ar->v2d, &sbuts->v2d, sizeof(View2D));
+
+ ar->v2d.scroll |= (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM);
break;
}
case SPACE_FILE:
@@ -5760,7 +6052,7 @@ static void area_add_window_regions(ScrArea *sa, SpaceLink *sl, ListBase *lb)
ar->regiontype= RGN_TYPE_WINDOW;
ar->v2d.scroll = (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM_O);
ar->v2d.align = (V2D_ALIGN_NO_NEG_X|V2D_ALIGN_NO_POS_Y);
- ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_KEEPZOOM|V2D_KEEPASPECT);
+ ar->v2d.keepzoom = (V2D_LOCKZOOM_X|V2D_LOCKZOOM_Y|V2D_LIMITZOOM|V2D_KEEPASPECT);
break;
}
case SPACE_TEXT:
@@ -6164,7 +6456,6 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
}
if(main->versionfile <= 191) {
- bScreen *sc= main->screen.first;
Object *ob= main->object.first;
Material *ma = main->mat.first;
@@ -6180,22 +6471,6 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
/*ob->quat[1]= 1.0f;*/ /* quats arnt used yet */
ob= ob->id.next;
}
-
- while(sc) {
- ScrArea *sa= sc->areabase.first;
- while(sa) {
- SpaceLink *sl= sa->spacedata.first;
- while(sl) {
- if(sl->spacetype==SPACE_BUTS) {
- SpaceButs *sbuts= (SpaceButs*) sl;
- sbuts->scaflag= BUTS_SENS_LINK|BUTS_SENS_ACT|BUTS_CONT_ACT|BUTS_ACT_ACT|BUTS_ACT_LINK;
- }
- sl= sl->next;
- }
- sa= sa->next;
- }
- sc= sc->id.next;
- }
}
if(main->versionfile <= 193) {
@@ -8108,7 +8383,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
simasel->v2d.minzoom= 0.5f;
simasel->v2d.maxzoom= 1.21f;
simasel->v2d.scroll= 0;
- simasel->v2d.keepzoom= V2D_KEEPZOOM|V2D_KEEPASPECT;
+ simasel->v2d.keepzoom= V2D_LIMITZOOM|V2D_KEEPASPECT;
simasel->v2d.keeptot= 0;
simasel->prv_h = 96;
simasel->prv_w = 96;
@@ -8128,20 +8403,20 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
/* add point caches */
for(ob=main->object.first; ob; ob=ob->id.next) {
if(ob->soft && !ob->soft->pointcache)
- ob->soft->pointcache= BKE_ptcache_add();
+ ob->soft->pointcache= BKE_ptcache_add(&ob->soft->ptcaches);
for(psys=ob->particlesystem.first; psys; psys=psys->next) {
- if(psys->soft && !psys->soft->pointcache)
- psys->soft->pointcache= BKE_ptcache_add();
+ //if(psys->soft && !psys->soft->pointcache)
+ // psys->soft->pointcache= BKE_ptcache_add(&psys->soft->ptcaches);
if(!psys->pointcache)
- psys->pointcache= BKE_ptcache_add();
+ psys->pointcache= BKE_ptcache_add(&psys->ptcaches);
}
for(md=ob->modifiers.first; md; md=md->next) {
if(md->type==eModifierType_Cloth) {
ClothModifierData *clmd = (ClothModifierData*) md;
if(!clmd->point_cache)
- clmd->point_cache= BKE_ptcache_add();
+ clmd->point_cache= BKE_ptcache_add(&clmd->ptcaches);
}
}
}
@@ -8429,9 +8704,9 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
/* create new particle system */
psys = MEM_callocN(sizeof(ParticleSystem), "particle_system");
- psys->pointcache = BKE_ptcache_add();
+ psys->pointcache = BKE_ptcache_add(&psys->ptcaches);
- part = psys->part = psys_new_settings("PSys", main);
+ part = psys->part = psys_new_settings("ParticleSettings", main);
/* needed for proper libdata lookup */
oldnewmap_insert(fd->libmap, psys->part, psys->part, 0);
@@ -9007,13 +9282,78 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
if (main->versionfile < 250) {
bScreen *screen;
Scene *scene;
+ Base *base;
Material *ma;
+ Camera *cam;
Mesh *me;
+ Curve *cu;
Scene *sce;
Tex *tx;
ParticleSettings *part;
Object *ob;
-
+ //PTCacheID *pid;
+ //ListBase pidlist;
+
+ bSound *sound;
+ Sequence *seq;
+ bActuator *act;
+
+ for(sound = main->sound.first; sound; sound = sound->id.next)
+ {
+ if(sound->newpackedfile)
+ {
+ sound->packedfile = sound->newpackedfile;
+ sound->newpackedfile = NULL;
+ }
+ }
+
+ for(ob = main->object.first; ob; ob= ob->id.next) {
+ for(act= ob->actuators.first; act; act= act->next) {
+ if (act->type == ACT_SOUND) {
+ bSoundActuator *sAct = (bSoundActuator*) act->data;
+ if(sAct->sound)
+ {
+ sound = newlibadr(fd, lib, sAct->sound);
+ sAct->flag = sound->flags | SOUND_FLAGS_3D ? ACT_SND_3D_SOUND : 0;
+ sAct->pitch = sound->pitch;
+ sAct->volume = sound->volume;
+ sAct->sound3D.reference_distance = sound->distance;
+ sAct->sound3D.max_gain = sound->max_gain;
+ sAct->sound3D.min_gain = sound->min_gain;
+ sAct->sound3D.rolloff_factor = sound->attenuation;
+ }
+ else
+ {
+ sAct->sound3D.reference_distance = 1.0f;
+ sAct->volume = 1.0f;
+ sAct->sound3D.max_gain = 1.0f;
+ sAct->sound3D.rolloff_factor = 1.0f;
+ }
+ sAct->sound3D.cone_inner_angle = 360.0f;
+ sAct->sound3D.cone_outer_angle = 360.0f;
+ sAct->sound3D.max_distance = FLT_MAX;
+ }
+ }
+ }
+
+ for(scene = main->scene.first; scene; scene = scene->id.next)
+ {
+ if(scene->ed && scene->ed->seqbasep)
+ {
+ for(seq = scene->ed->seqbasep->first; seq; seq = seq->next)
+ {
+ if(seq->type == SEQ_HD_SOUND)
+ {
+ char str[FILE_MAX];
+ BLI_join_dirfile(str, seq->strip->dir, seq->strip->stripdata->name);
+ BLI_convertstringcode(str, G.sce);
+ BLI_convertstringframe(str, scene->r.cfra);
+ seq->sound = sound_new_file(main, str);
+ }
+ }
+ }
+ }
+
for(screen= main->screen.first; screen; screen= screen->id.next) {
do_versions_windowmanager_2_50(screen);
do_versions_gpencil_2_50(main, screen);
@@ -9024,14 +9364,6 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
*/
//do_versions_ipos_to_animato(main);
- /* struct audio data moved to renderdata */
- for(scene= main->scene.first; scene; scene= scene->id.next) {
- scene->r.audio = scene->audio;
-
- if(!scene->toolsettings->uv_selectmode)
- scene->toolsettings->uv_selectmode= UV_SELECT_VERTEX;
- }
-
/* shader, composit and texture node trees have id.name empty, put something in
* to have them show in RNA viewer and accessible otherwise.
*/
@@ -9043,6 +9375,20 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
for(sce= main->scene.first; sce; sce= sce->id.next) {
if(sce->nodetree && strlen(sce->nodetree->id.name)==0)
strcpy(sce->nodetree->id.name, "NTComposit Nodetree");
+
+ /* move to cameras */
+ if(sce->r.mode & R_PANORAMA) {
+ for(base=sce->base.first; base; base=base->next) {
+ ob= newlibadr(fd, lib, base->object);
+
+ if(ob->type == OB_CAMERA && !ob->id.lib) {
+ cam= newlibadr(fd, lib, ob->data);
+ cam->flag |= CAM_PANORAMA;
+ }
+ }
+
+ sce->r.mode &= ~R_PANORAMA;
+ }
}
/* and texture trees */
for(tx= main->tex.first; tx; tx= tx->id.next) {
@@ -9070,37 +9416,57 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
part->draw_as = PART_DRAW_REND;
}
}
+ part->path_end = 1.0f;
+ part->clength = 1.0f;
}
/* set old pointcaches to have disk cache flag */
for(ob = main->object.first; ob; ob= ob->id.next) {
- ParticleSystem *psys = ob->particlesystem.first;
- for(; psys; psys=psys->next) {
- if(psys->pointcache)
- psys->pointcache->flag |= PTCACHE_DISK_CACHE;
- }
+ //BKE_ptcache_ids_from_object(&pidlist, ob);
+
+ //for(pid=pidlist.first; pid; pid=pid->next)
+ // pid->cache->flag |= PTCACHE_DISK_CACHE;
+
+ //BLI_freelistN(&pidlist);
+ }
- /* TODO: softbody & cloth caches */
+ /* type was a mixed flag & enum. move the 2d flag elsewhere */
+ for(cu = main->curve.first; cu; cu= cu->id.next) {
+ Nurb *nu;
+
+ for(nu= cu->nurb.first; nu; nu= nu->next) {
+ nu->flag |= (nu->type & CU_2D);
+ nu->type &= CU_TYPE;
+ }
}
}
- /* TODO: should be moved into one of the version blocks once this branch moves to trunk and we can
- bump the version (or sub-version.) */
- {
+ if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 1)) {
Object *ob;
Material *ma;
+ Tex *tex;
Scene *sce;
ToolSettings *ts;
- int i;
+ //PTCacheID *pid;
+ //ListBase pidlist;
+ int i, a;
for(ob = main->object.first; ob; ob = ob->id.next) {
+ //BKE_ptcache_ids_from_object(&pidlist, ob);
+
+ //for(pid=pidlist.first; pid; pid=pid->next) {
+ // if(pid->ptcaches->first == NULL)
+ // pid->ptcaches->first = pid->ptcaches->last = pid->cache;
+ //}
+
+ //BLI_freelistN(&pidlist);
if(ob->type == OB_MESH) {
Mesh *me = newlibadr(fd, lib, ob->data);
void *olddata = ob->data;
ob->data = me;
- if(me && me->mr) {
+ if(me && me->id.lib==NULL && me->mr) { /* XXX - library meshes crash on loading most yoFrankie levels, the multires pointer gets invalid - Campbell */
MultiresLevel *lvl;
ModifierData *md;
MultiresModifierData *mmd;
@@ -9140,7 +9506,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
mmd->lvl = mmd->totlvl;
orig = CDDM_from_mesh(me, NULL);
- dm = multires_dm_create_from_derived(mmd, orig, me, 0, 0);
+ dm = multires_dm_create_from_derived(mmd, 0, orig, ob, 0, 0);
multires_load_old(dm, me->mr);
@@ -9155,22 +9521,208 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
ob->data = olddata;
}
+
+ if(ob->totcol && ob->matbits == NULL) {
+ int a;
+
+ ob->matbits= MEM_callocN(sizeof(char)*ob->totcol, "ob->matbits");
+ for(a=0; a<ob->totcol; a++)
+ ob->matbits[a]= ob->colbits & (1<<a);
+ }
+ }
+
+ /* texture filter */
+ for(tex = main->tex.first; tex; tex = tex->id.next) {
+ if(tex->afmax == 0)
+ tex->afmax= 8;
}
for(ma = main->mat.first; ma; ma = ma->id.next) {
+ if(ma->mode & MA_WIRE) {
+ ma->material_type= MA_TYPE_WIRE;
+ ma->mode &= ~MA_WIRE;
+ }
if(ma->mode & MA_HALO) {
ma->material_type= MA_TYPE_HALO;
ma->mode &= ~MA_HALO;
}
+
+ if(ma->mode & (MA_ZTRANSP|MA_RAYTRANSP)) {
+ ma->mode |= MA_TRANSP;
+ }
+ else {
+ ma->mode |= MA_ZTRANSP;
+ ma->mode &= ~MA_TRANSP;
+ }
+
+ /* set new bump for unused slots */
+ for(a=0; a<MAX_MTEX; a++) {
+ if(ma->mtex[a]) {
+ tex= ma->mtex[a]->tex;
+ if(!tex)
+ ma->mtex[a]->texflag |= MTEX_NEW_BUMP;
+ else {
+ tex= (Tex*)newlibadr(fd, ma->id.lib, tex);
+ if(tex && tex->type == 0) /* invalid type */
+ ma->mtex[a]->texflag |= MTEX_NEW_BUMP;
+ }
+ }
+ }
+
+ /* volume rendering settings */
+ if (ma->vol.stepsize < 0.0001f) {
+ ma->vol.density = 1.0f;
+ ma->vol.emission = 0.0f;
+ ma->vol.absorption = 1.0f;
+ ma->vol.scattering = 1.0f;
+ ma->vol.emission_col[0] = ma->vol.emission_col[1] = ma->vol.emission_col[2] = 1.0f;
+ ma->vol.absorption_col[0] = ma->vol.absorption_col[1] = ma->vol.absorption_col[2] = 0.0f;
+ ma->vol.density_scale = 1.0f;
+ ma->vol.depth_cutoff = 0.01f;
+ ma->vol.stepsize_type = MA_VOL_STEP_RANDOMIZED;
+ ma->vol.stepsize = 0.2f;
+ ma->vol.shade_stepsize = 0.2f;
+ ma->vol.shade_type = MA_VOL_SHADE_SINGLE;
+ ma->vol.shadeflag |= MA_VOL_PRECACHESHADING;
+ ma->vol.precache_resolution = 50;
+ }
}
for(sce = main->scene.first; sce; sce = sce->id.next) {
ts= sce->toolsettings;
- if(ts->normalsize == 0.0) {
+ if(ts->normalsize == 0.0 || !ts->uv_selectmode || ts->vgroup_weight == 0.0) {
ts->normalsize= 0.1f;
ts->selectmode= SCE_SELECT_VERTEX;
+
+ /* autokeying - setting should be taken from the user-prefs
+ * but the userprefs version may not have correct flags set
+ * (i.e. will result in blank box when enabled)
+ */
ts->autokey_mode= U.autokey_mode;
+ if (ts->autokey_mode == 0)
+ ts->autokey_mode= 2; /* 'add/replace' but not on */
+ ts->uv_selectmode= UV_SELECT_VERTEX;
+ ts->vgroup_weight= 1.0f;
+ }
+
+ /* Game Settings */
+ //Dome
+ sce->gm.dome.angle = sce->r.domeangle;
+ sce->gm.dome.mode = sce->r.domemode;
+ sce->gm.dome.res = sce->r.domeres;
+ sce->gm.dome.resbuf = sce->r.domeresbuf;
+ sce->gm.dome.tilt = sce->r.dometilt;
+ sce->gm.dome.warptext = sce->r.dometext;
+
+ //Stand Alone
+ sce->gm.fullscreen = sce->r.fullscreen;
+ sce->gm.xplay = sce->r.xplay;
+ sce->gm.yplay = sce->r.yplay;
+ sce->gm.freqplay = sce->r.freqplay;
+ sce->gm.depth = sce->r.depth;
+ sce->gm.attrib = sce->r.attrib;
+
+ //Stereo
+ sce->gm.xsch = sce->r.xsch;
+ sce->gm.ysch = sce->r.ysch;
+ sce->gm.stereomode = sce->r.stereomode;
+ /* reassigning stereomode NO_STEREO and DOME to a separeted flag*/
+ if (sce->gm.stereomode == 1){ //1 = STEREO_NOSTEREO
+ sce->gm.stereoflag = STEREO_NOSTEREO;
+ sce->gm.stereomode = STEREO_ANAGLYPH;
+ }
+ else if(sce->gm.stereomode == 8){ //8 = STEREO_DOME
+ sce->gm.stereoflag = STEREO_DOME;
+ sce->gm.stereomode = STEREO_ANAGLYPH;
}
+ else
+ sce->gm.stereoflag = STEREO_ENABLED;
+
+ //Framing
+ sce->gm.framing = sce->framing;
+ sce->gm.xplay = sce->r.xplay;
+ sce->gm.yplay = sce->r.yplay;
+ sce->gm.freqplay= sce->r.freqplay;
+ sce->gm.depth= sce->r.depth;
+
+ //Physic (previously stored in world)
+ sce->gm.gravity =9.8f;
+ sce->gm.physicsEngine= WOPHY_BULLET;// Bullet by default
+ sce->gm.mode = WO_DBVT_CULLING; // DBVT culling by default
+ sce->gm.occlusionRes = 128;
+ sce->gm.ticrate = 60;
+ sce->gm.maxlogicstep = 5;
+ sce->gm.physubstep = 1;
+ sce->gm.maxphystep = 5;
+ }
+ }
+
+ if (main->versionfile < 250 || (main->versionfile == 250 && main->subversionfile < 2)) {
+ Scene *sce;
+ Object *ob;
+
+ for(sce = main->scene.first; sce; sce = sce->id.next) {
+ if(fd->fileflags & G_FILE_ENABLE_ALL_FRAMES)
+ sce->gm.flag |= GAME_ENABLE_ALL_FRAMES;
+ if(fd->fileflags & G_FILE_SHOW_DEBUG_PROPS)
+ sce->gm.flag |= GAME_SHOW_DEBUG_PROPS;
+ if(fd->fileflags & G_FILE_SHOW_FRAMERATE)
+ sce->gm.flag |= GAME_SHOW_FRAMERATE;
+ if(fd->fileflags & G_FILE_SHOW_PHYSICS)
+ sce->gm.flag |= GAME_SHOW_PHYSICS;
+ if(fd->fileflags & G_FILE_GLSL_NO_SHADOWS)
+ sce->gm.flag |= GAME_GLSL_NO_SHADOWS;
+ if(fd->fileflags & G_FILE_GLSL_NO_SHADERS)
+ sce->gm.flag |= GAME_GLSL_NO_SHADERS;
+ if(fd->fileflags & G_FILE_GLSL_NO_RAMPS)
+ sce->gm.flag |= GAME_GLSL_NO_RAMPS;
+ if(fd->fileflags & G_FILE_GLSL_NO_NODES)
+ sce->gm.flag |= GAME_GLSL_NO_NODES;
+ if(fd->fileflags & G_FILE_GLSL_NO_EXTRA_TEX)
+ sce->gm.flag |= GAME_GLSL_NO_EXTRA_TEX;
+ if(fd->fileflags & G_FILE_IGNORE_DEPRECATION_WARNINGS)
+ sce->gm.flag |= GAME_IGNORE_DEPRECATION_WARNINGS;
+
+ if(fd->fileflags & G_FILE_GAME_MAT_GLSL)
+ sce->gm.matmode= GAME_MAT_GLSL;
+ else if(fd->fileflags & G_FILE_GAME_MAT)
+ sce->gm.matmode= GAME_MAT_MULTITEX;
+ else
+ sce->gm.matmode= GAME_MAT_TEXFACE;
+
+ sce->gm.flag |= GAME_DISPLAY_LISTS;
+ }
+
+ for(ob = main->object.first; ob; ob = ob->id.next) {
+ if(ob->flag & 8192) // OB_POSEMODE = 8192
+ ob->mode |= OB_MODE_POSE;
+ }
+ }
+
+ /* put 2.50 compatibility code here until next subversion bump */
+ {
+ Scene *sce;
+ Object *ob;
+
+ for(sce = main->scene.first; sce; sce = sce->id.next)
+ if(sce->unit.scale_length == 0.0f)
+ sce->unit.scale_length= 1.0f;
+
+ for(ob = main->object.first; ob; ob = ob->id.next) {
+ FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim);
+ if (fluidmd) fluidmd->fss->fmd = fluidmd;
+ }
+
+ for(sce= main->scene.first; sce; sce= sce->id.next)
+ {
+ if(sce->audio.main == 0.0)
+ sce->audio.main = 1.0;
+
+ sce->r.ffcodecdata.audio_mixrate = sce->audio.mixrate;
+ sce->r.ffcodecdata.audio_volume = sce->audio.main;
+ sce->audio.distance_model = 2.0;
+ sce->audio.doppler_factor = 1.0;
+ sce->audio.speed_of_sound = 343.3;
}
}
@@ -9224,7 +9776,7 @@ static BHead *read_userdef(BlendFileData *bfd, FileData *fd, BHead *bhead)
// XXX
bfd->user->uifonts.first= bfd->user->uifonts.last= NULL;
bfd->user->uistyles.first= bfd->user->uistyles.last= NULL;
-
+
bhead = blo_nextbhead(fd, bhead);
/* read all attached data */
@@ -9237,7 +9789,7 @@ static BHead *read_userdef(BlendFileData *bfd, FileData *fd, BHead *bhead)
return bhead;
}
-BlendFileData *blo_read_file_internal(FileData *fd)
+BlendFileData *blo_read_file_internal(FileData *fd, char *file)
{
BHead *bhead= blo_firstbhead(fd);
BlendFileData *bfd;
@@ -9248,6 +9800,9 @@ BlendFileData *blo_read_file_internal(FileData *fd)
bfd->main->versionfile= fd->fileversion;
+ bfd->type= BLENFILETYPE_BLEND;
+ strncpy(bfd->main->name, file, sizeof(bfd->main->name)-1);
+
while(bhead) {
switch(bhead->code) {
case DATA:
@@ -9502,12 +10057,27 @@ static void expand_keyingsets(FileData *fd, Main *mainvar, ListBase *list)
}
}
+static void expand_animdata_nlastrips(FileData *fd, Main *mainvar, ListBase *list)
+{
+ NlaStrip *strip;
+
+ for (strip= list->first; strip; strip= strip->next) {
+ /* check child strips */
+ expand_animdata_nlastrips(fd, mainvar, &strip->strips);
+
+ /* relink referenced action */
+ expand_doit(fd, mainvar, strip->act);
+ }
+}
+
static void expand_animdata(FileData *fd, Main *mainvar, AnimData *adt)
{
FCurve *fcd;
+ NlaTrack *nlt;
/* own action */
expand_doit(fd, mainvar, adt->action);
+ expand_doit(fd, mainvar, adt->tmpact);
/* drivers - assume that these F-Curves have driver data to be in this list... */
for (fcd= adt->drivers.first; fcd; fcd= fcd->next) {
@@ -9517,6 +10087,10 @@ static void expand_animdata(FileData *fd, Main *mainvar, AnimData *adt)
for (dtar= driver->targets.first; dtar; dtar= dtar->next)
expand_doit(fd, mainvar, dtar->id);
}
+
+ /* nla-data - referenced actions */
+ for (nlt= adt->nla_tracks.first; nlt; nlt= nlt->next)
+ expand_animdata_nlastrips(fd, mainvar, &nlt->strips);
}
static void expand_particlesettings(FileData *fd, Main *mainvar, ParticleSettings *part)
@@ -9526,7 +10100,8 @@ static void expand_particlesettings(FileData *fd, Main *mainvar, ParticleSetting
expand_doit(fd, mainvar, part->eff_group);
expand_doit(fd, mainvar, part->bb_ob);
- expand_animdata(fd, mainvar, part->adt);
+ if(part->adt)
+ expand_animdata(fd, mainvar, part->adt);
}
static void expand_group(FileData *fd, Main *mainvar, Group *group)
@@ -9650,6 +10225,9 @@ static void expand_mball(FileData *fd, Main *mainvar, MetaBall *mb)
for(a=0; a<mb->totcol; a++) {
expand_doit(fd, mainvar, mb->mat[a]);
}
+
+ if(mb->adt)
+ expand_animdata(fd, mainvar, mb->adt);
}
static void expand_curve(FileData *fd, Main *mainvar, Curve *cu)
@@ -9861,6 +10439,9 @@ static void expand_armature(FileData *fd, Main *mainvar, bArmature *arm)
{
Bone *curBone;
+ if(arm->adt)
+ expand_animdata(fd, mainvar, arm->adt);
+
for (curBone = arm->bonebase.first; curBone; curBone=curBone->next) {
expand_bones(fd, mainvar, curBone);
}
@@ -9895,14 +10476,15 @@ static void expand_modifier(FileData *fd, Main *mainvar, ModifierData *md)
expand_doit(fd, mainvar, dmd->map_object);
expand_doit(fd, mainvar, dmd->texture);
}
-}
-
-static void expand_scriptlink(FileData *fd, Main *mainvar, ScriptLink *slink)
-{
- int i;
-
- for(i=0; i<slink->totscript; i++) {
- expand_doit(fd, mainvar, slink->scripts[i]);
+ else if (md->type==eModifierType_Smoke) {
+ SmokeModifierData *smd = (SmokeModifierData*) md;
+
+ if(smd->type==MOD_SMOKE_TYPE_DOMAIN && smd->domain)
+ {
+ expand_doit(fd, mainvar, smd->domain->coll_group);
+ expand_doit(fd, mainvar, smd->domain->fluid_group);
+ expand_doit(fd, mainvar, smd->domain->eff_group);
+ }
}
}
@@ -9928,6 +10510,8 @@ static void expand_object(FileData *fd, Main *mainvar, Object *ob)
expand_doit(fd, mainvar, ob->poselib);
expand_constraints(fd, mainvar, &ob->constraints);
+ expand_doit(fd, mainvar, ob->gpd);
+
// XXX depreceated - old animation system (for version patching only)
expand_doit(fd, mainvar, ob->ipo);
expand_doit(fd, mainvar, ob->action);
@@ -10006,11 +10590,19 @@ static void expand_object(FileData *fd, Main *mainvar, Object *ob)
bObjectActuator *oa= act->data;
expand_doit(fd, mainvar, oa->reference);
}
+ else if(act->type==ACT_ADD_OBJECT) {
+ bAddObjectActuator *aoa= act->data;
+ expand_doit(fd, mainvar, aoa->ob);
+ }
else if(act->type==ACT_SCENE) {
bSceneActuator *sa= act->data;
expand_doit(fd, mainvar, sa->camera);
expand_doit(fd, mainvar, sa->scene);
}
+ else if(act->type==ACT_2DFILTER) {
+ bTwoDFilterActuator *tdfa= act->data;
+ expand_doit(fd, mainvar, tdfa->text);
+ }
else if(act->type==ACT_ACTION) {
bActionActuator *aa= act->data;
expand_doit(fd, mainvar, aa->act);
@@ -10027,13 +10619,20 @@ static void expand_object(FileData *fd, Main *mainvar, Object *ob)
bMessageActuator *ma= act->data;
expand_doit(fd, mainvar, ma->toObject);
}
+ else if(act->type==ACT_PARENT) {
+ bParentActuator *pa= act->data;
+ expand_doit(fd, mainvar, pa->ob);
+ }
+ else if(act->type==ACT_ARMATURE) {
+ bArmatureActuator *arma= act->data;
+ expand_doit(fd, mainvar, arma->target);
+ }
act= act->next;
}
if(ob->pd && ob->pd->tex)
expand_doit(fd, mainvar, ob->pd->tex);
- expand_scriptlink(fd, mainvar, &ob->scriptlink);
}
static void expand_scene(FileData *fd, Main *mainvar, Scene *sce)
@@ -10063,7 +10662,10 @@ static void expand_scene(FileData *fd, Main *mainvar, Scene *sce)
}
if(sce->r.dometext)
- expand_doit(fd, mainvar, sce->r.dometext);
+ expand_doit(fd, mainvar, sce->gm.dome.warptext);
+
+ if(sce->gpd)
+ expand_doit(fd, mainvar, sce->gpd);
}
static void expand_camera(FileData *fd, Main *mainvar, Camera *ca)
@@ -10224,8 +10826,9 @@ static void give_base_to_objects(Main *mainvar, Scene *sce, Library *lib, int is
}
-static void append_named_part(FileData *fd, Main *mainvar, Scene *scene, char *name, int idcode, short flag)
+static void append_named_part(const bContext *C, Main *mainl, FileData *fd, char *name, int idcode, short flag)
{
+ Scene *scene= CTX_data_scene(C);
Object *ob;
Base *base;
BHead *bhead;
@@ -10241,9 +10844,9 @@ static void append_named_part(FileData *fd, Main *mainvar, Scene *scene, char *n
if(strcmp(idname+2, name)==0) {
- id= is_yet_read(fd, mainvar, bhead);
+ id= is_yet_read(fd, mainl, bhead);
if(id==NULL) {
- read_libblock(fd, mainvar, bhead, LIB_TESTEXT, NULL);
+ read_libblock(fd, mainl, bhead, LIB_TESTEXT, NULL);
}
else {
printf("append: already linked\n");
@@ -10254,17 +10857,22 @@ static void append_named_part(FileData *fd, Main *mainvar, Scene *scene, char *n
}
}
- if(idcode==ID_OB) { /* loose object: give a base */
+ if(idcode==ID_OB && scene) { /* loose object: give a base */
base= MEM_callocN( sizeof(Base), "app_nam_part");
BLI_addtail(&scene->base, base);
- if(id==NULL) ob= mainvar->object.last;
+ if(id==NULL) ob= mainl->object.last;
else ob= (Object *)id;
- /* XXX use context to find view3d->lay */
- //if((flag & FILE_ACTIVELAY)) {
- // scene->lay;
- //}
+ /* link at active layer (view3d->lay if in context, else scene->lay */
+ if((flag & FILE_ACTIVELAY)) {
+ View3D *v3d = CTX_wm_view3d(C);
+ if (v3d) {
+ ob->lay = v3d->layact;
+ } else {
+ ob->lay = scene->lay;
+ }
+ }
base->lay= ob->lay;
base->object= ob;
ob->id.us++;
@@ -10283,6 +10891,12 @@ static void append_named_part(FileData *fd, Main *mainvar, Scene *scene, char *n
}
}
+void BLO_library_append_named_part(const bContext *C, Main *mainl, BlendHandle** bh, char *name, int idcode, short flag)
+{
+ FileData *fd= (FileData*)(*bh);
+ append_named_part(C, mainl, fd, name, idcode, flag);
+}
+
static void append_id_part(FileData *fd, Main *mainvar, ID *id, ID **id_r)
{
BHead *bhead;
@@ -10305,11 +10919,10 @@ static void append_id_part(FileData *fd, Main *mainvar, ID *id, ID **id_r)
/* common routine to append/link something from a library */
-static Library* library_append(Main *mainvar, Scene *scene, char* file, char *dir, int idcode,
- int totsel, FileData **fd, struct direntry* filelist, int totfile, short flag)
+static Main* library_append_begin(const bContext *C, FileData **fd, char *dir)
{
+ Main *mainvar= CTX_data_main(C);
Main *mainl;
- Library *curlib;
/* make mains */
blo_split_main(&(*fd)->mainlist, mainvar);
@@ -10319,19 +10932,69 @@ static Library* library_append(Main *mainvar, Scene *scene, char* file, char *di
mainl->versionfile= (*fd)->fileversion; /* needed for do_version */
- curlib= mainl->curlib;
+ return mainl;
+}
+
+Main* BLO_library_append_begin(const bContext *C, BlendHandle** bh, char *dir)
+{
+ FileData *fd= (FileData*)(*bh);
+ return library_append_begin(C, &fd, dir);
+}
+
+static void append_do_cursor(Scene *scene, Library *curlib, short flag)
+{
+ Base *centerbase;
+ Object *ob;
+ float *curs, centerloc[3], vec[3], min[3], max[3];
+ int count= 0;
+
+ /* when not linking (appending)... */
+ if(flag & FILE_LINK)
+ return;
+
+ /* we're not appending at cursor */
+ if((flag & FILE_ATCURSOR) == 0)
+ return;
- if(totsel==0) {
- append_named_part(*fd, mainl, scene, file, idcode, flag);
+ /* find the center of everything appended */
+ INIT_MINMAX(min, max);
+ centerbase= (scene->base.first);
+ while(centerbase) {
+ if(centerbase->object->id.lib==curlib && centerbase->object->parent==NULL) {
+ VECCOPY(vec, centerbase->object->loc);
+ DO_MINMAX(vec, min, max);
+ count++;
+ }
+ centerbase= centerbase->next;
}
- else {
- int a;
- for(a=0; a<totfile; a++) {
- if(filelist[a].flags & ACTIVE) {
- append_named_part(*fd, mainl, scene, filelist[a].relname, idcode, flag);
- }
+ /* we haven't found any objects to move to cursor */
+ if(!count)
+ return;
+
+ /* move from the center of the appended objects to cursor */
+ centerloc[0]= (min[0]+max[0])/2;
+ centerloc[1]= (min[1]+max[1])/2;
+ centerloc[2]= (min[2]+max[2])/2;
+ curs = scene->cursor;
+ VECSUB(centerloc,curs,centerloc);
+
+ /* now translate the center of the objects */
+ centerbase= (scene->base.first);
+ while(centerbase) {
+ if(centerbase->object->id.lib==curlib && centerbase->object->parent==NULL) {
+ ob= centerbase->object;
+ ob->loc[0] += centerloc[0];
+ ob->loc[1] += centerloc[1];
+ ob->loc[2] += centerloc[2];
}
+ centerbase= centerbase->next;
}
+}
+
+static void library_append_end(const bContext *C, Main *mainl, FileData **fd, int idcode, short flag)
+{
+ Main *mainvar= CTX_data_main(C);
+ Scene *scene= CTX_data_scene(C);
/* make main consistant */
expand_main(*fd, mainl);
@@ -10339,6 +11002,7 @@ static Library* library_append(Main *mainvar, Scene *scene, char* file, char *di
/* do this when expand found other libs */
read_libraries(*fd, &(*fd)->mainlist);
+ /* make the lib path relative if required */
if(flag & FILE_STRINGCODE) {
/* use the full path, this could have been read by other library even */
@@ -10356,14 +11020,16 @@ static Library* library_append(Main *mainvar, Scene *scene, char* file, char *di
fix_relpaths_library(G.sce, mainvar); /* make all relative paths, relative to the open blend file */
/* give a base to loose objects. If group append, do it for objects too */
- if(idcode==ID_GR) {
- if (flag & FILE_LINK) {
- give_base_to_objects(mainvar, scene, NULL, 0);
+ if(scene) {
+ if(idcode==ID_GR) {
+ if (flag & FILE_LINK) {
+ give_base_to_objects(mainvar, scene, NULL, 0);
+ } else {
+ give_base_to_objects(mainvar, scene, mainl->curlib, 1);
+ }
} else {
- give_base_to_objects(mainvar, scene, curlib, 1);
- }
- } else {
- give_base_to_objects(mainvar, scene, NULL, 0);
+ give_base_to_objects(mainvar, scene, NULL, 0);
+ }
}
/* has been removed... erm, why? s..ton) */
/* 20040907: looks like they are give base already in append_named_part(); -Nathan L */
@@ -10375,14 +11041,23 @@ static Library* library_append(Main *mainvar, Scene *scene, char* file, char *di
*fd = NULL;
}
- return curlib;
+ append_do_cursor(scene, mainl->curlib, flag);
+}
+
+void BLO_library_append_end(const bContext *C, struct Main *mainl, BlendHandle** bh, int idcode, short flag)
+{
+ FileData *fd= (FileData*)(*bh);
+ library_append_end(C, mainl, &fd, idcode, flag);
+ *bh= (BlendHandle*)fd;
}
/* this is a version of BLO_library_append needed by the BPython API, so
* scripts can load data from .blend files -- see Blender.Library module.*/
/* append to scene */
/* this should probably be moved into the Python code anyway */
-
+/* tentatively removed, Python should be able to use the split functions too: */
+/* BLO_library_append_begin, BLO_library_append_end, BLO_library_append_named_part */
+#if 0
void BLO_script_library_append(BlendHandle **bh, char *dir, char *name,
int idcode, short flag, Main *mainvar, Scene *scene, ReportList *reports)
{
@@ -10394,92 +11069,12 @@ void BLO_script_library_append(BlendHandle **bh, char *dir, char *name,
if(fd) fd->reports= NULL;
/* do we need to do this? */
- DAG_scene_sort(scene);
+ if(scene)
+ DAG_scene_sort(scene);
*bh= (BlendHandle*)fd;
}
-
-/* append to scene */
-void BLO_library_append(BlendHandle** bh, struct direntry* filelist, int totfile,
- char *dir, char* file, short flag, int idcode, Main *mainvar, Scene *scene, ReportList *reports)
-{
- FileData *fd= (FileData*)(*bh);
- Library *curlib;
- Base *centerbase;
- Object *ob;
- int a, totsel=0;
-
- /* are there files selected? */
- for(a=0; a<totfile; a++) {
- if(filelist[a].flags & ACTIVE) {
- totsel++;
- }
- }
-
- if(totsel==0) {
- /* is the indicated file in the filelist? */
- if(file[0]) {
- for(a=0; a<totfile; a++) {
- if( strcmp(filelist[a].relname, file)==0) break;
- }
- if(a==totfile) {
- BKE_report(reports, RPT_ERROR, "Wrong indicated name");
- return;
- }
- }
- else {
- BKE_report(reports, RPT_ERROR, "Nothing indicated");
- return;
- }
- }
- /* now we have or selected, or an indicated file */
-
- if(flag & FILE_AUTOSELECT) scene_deselect_all(scene);
-
- fd->reports= reports;
- curlib = library_append(mainvar, scene, file, dir, idcode, totsel, &fd, filelist, totfile,flag );
- if(fd) fd->reports= NULL;
-
- *bh= (BlendHandle*)fd;
-
- /* when not linking (appending)... */
- if((flag & FILE_LINK)==0) {
- if(flag & FILE_ATCURSOR) {
- float *curs, centerloc[3], vec[3], min[3], max[3];
- int count= 0;
-
- INIT_MINMAX(min, max);
-
- centerbase= (scene->base.first);
- while(centerbase) {
- if(centerbase->object->id.lib==curlib && centerbase->object->parent==NULL) {
- VECCOPY(vec, centerbase->object->loc);
- DO_MINMAX(vec, min, max);
- count++;
- }
- centerbase= centerbase->next;
- }
- if(count) {
- centerloc[0]= (min[0]+max[0])/2;
- centerloc[1]= (min[1]+max[1])/2;
- centerloc[2]= (min[2]+max[2])/2;
- curs = scene->cursor;
- VECSUB(centerloc,curs,centerloc);
-
- centerbase= (scene->base.first);
- while(centerbase) {
- if(centerbase->object->id.lib==curlib && centerbase->object->parent==NULL) {
- ob= centerbase->object;
- ob->loc[0] += centerloc[0];
- ob->loc[1] += centerloc[1];
- ob->loc[2] += centerloc[2];
- }
- centerbase= centerbase->next;
- }
- }
- }
- }
-}
+#endif
/* ************* READ LIBRARY ************** */
@@ -10523,9 +11118,10 @@ static void read_libraries(FileData *basefd, ListBase *mainlist)
printf("read library: lib %s\n", mainptr->curlib->name);
fd= blo_openblenderfile(mainptr->curlib->filename, &reports);
- fd->reports= basefd->reports;
if (fd) {
+ fd->reports= basefd->reports;
+
if (fd->libmap)
oldnewmap_free(fd->libmap);
@@ -10639,7 +11235,7 @@ BlendFileData *blo_read_blendafterruntime(int file, char *name, int actualsize,
return NULL;
fd->reports= reports;
- bfd= blo_read_file_internal(fd);
+ bfd= blo_read_file_internal(fd, "");
blo_freefiledata(fd);
return bfd;