/* * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. * All rights reserved. * * * Contributor(s): Blender Foundation * * ***** END GPL LICENSE BLOCK ***** * */ /** \file blender/blenloader/intern/readfile_pre250.c * \ingroup blenloader */ #include "zlib.h" #include #ifndef WIN32 # include // for read close #else # include // for open close read # include "winsock2.h" # include "BLI_winstuff.h" #endif /* allow readfile to use deprecated functionality */ #define DNA_DEPRECATED_ALLOW #include "DNA_armature_types.h" #include "DNA_actuator_types.h" #include "DNA_camera_types.h" #include "DNA_constraint_types.h" #include "DNA_effect_types.h" #include "DNA_group_types.h" #include "DNA_key_types.h" #include "DNA_lattice_types.h" #include "DNA_lamp_types.h" #include "DNA_material_types.h" #include "DNA_mesh_types.h" #include "DNA_meshdata_types.h" #include "DNA_nla_types.h" #include "DNA_node_types.h" #include "DNA_object_fluidsim.h" // NT #include "DNA_object_types.h" #include "DNA_property_types.h" #include "DNA_view3d_types.h" #include "DNA_screen_types.h" #include "DNA_sensor_types.h" #include "DNA_sdna_types.h" #include "DNA_sequence_types.h" #include "DNA_sound_types.h" #include "DNA_space_types.h" #include "DNA_vfont_types.h" #include "DNA_world_types.h" #include "MEM_guardedalloc.h" #include "BLI_utildefines.h" #include "BLI_blenlib.h" #include "BLI_math.h" #include "BLI_edgehash.h" #include "BKE_armature.h" #include "BKE_colortools.h" #include "BKE_constraint.h" #include "BKE_deform.h" #include "BKE_fcurve.h" #include "BKE_global.h" // for G #include "BKE_image.h" #include "BKE_lattice.h" #include "BKE_main.h" // for Main #include "BKE_mesh.h" // for ME_ defines (patching) #include "BKE_modifier.h" #include "BKE_particle.h" #include "BKE_pointcache.h" #include "BKE_property.h" // for get_ob_property #include "BKE_scene.h" #include "BKE_sequencer.h" #include "BKE_utildefines.h" // SWITCH_INT DATA ENDB DNA1 O_BINARY GLOB USER TEST REND #include "IMB_imbuf.h" // for proxy / timecode versioning stuff #include "NOD_socket.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 #include "BLO_readfile.h" #include "BLO_undofile.h" #include "RE_engine.h" #include "readfile.h" #include "PIL_time.h" #include static void vcol_to_fcol(Mesh *me) { MFace *mface; unsigned int *mcol, *mcoln, *mcolmain; int a; if (me->totface==0 || me->mcol==NULL) return; mcoln= mcolmain= MEM_mallocN(4*sizeof(int)*me->totface, "mcoln"); mcol = (unsigned int *)me->mcol; mface= me->mface; for (a=me->totface; a>0; a--, mface++) { mcoln[0]= mcol[mface->v1]; mcoln[1]= mcol[mface->v2]; mcoln[2]= mcol[mface->v3]; mcoln[3]= mcol[mface->v4]; mcoln+= 4; } MEM_freeN(me->mcol); me->mcol= (MCol *)mcolmain; } static int map_223_keybd_code_to_224_keybd_code(int code) { switch (code) { case 312: return 311; /* F12KEY */ case 159: return 161; /* PADSLASHKEY */ case 161: return 150; /* PAD0 */ case 154: return 151; /* PAD1 */ case 150: return 152; /* PAD2 */ case 155: return 153; /* PAD3 */ case 151: return 154; /* PAD4 */ case 156: return 155; /* PAD5 */ case 152: return 156; /* PAD6 */ case 157: return 157; /* PAD7 */ case 153: return 158; /* PAD8 */ case 158: return 159; /* PAD9 */ default: return code; } } static void do_version_bone_head_tail_237(Bone *bone) { Bone *child; float vec[3]; /* head */ copy_v3_v3(bone->arm_head, bone->arm_mat[3]); /* tail is in current local coord system */ copy_v3_v3(vec, bone->arm_mat[1]); mul_v3_fl(vec, bone->length); add_v3_v3v3(bone->arm_tail, bone->arm_head, vec); for (child= bone->childbase.first; child; child= child->next) do_version_bone_head_tail_237(child); } static void bone_version_238(ListBase *lb) { Bone *bone; for (bone= lb->first; bone; bone= bone->next) { if (bone->rad_tail==0.0f && bone->rad_head==0.0f) { bone->rad_head= 0.25f*bone->length; bone->rad_tail= 0.1f*bone->length; bone->dist-= bone->rad_head; if (bone->dist<=0.0f) bone->dist= 0.0f; } bone_version_238(&bone->childbase); } } static void bone_version_239(ListBase *lb) { Bone *bone; for (bone= lb->first; bone; bone= bone->next) { if (bone->layer==0) bone->layer= 1; bone_version_239(&bone->childbase); } } static void ntree_version_241(bNodeTree *ntree) { bNode *node; if (ntree->type==NTREE_COMPOSIT) { for (node= ntree->nodes.first; node; node= node->next) { if (node->type==CMP_NODE_BLUR) { if (node->storage==NULL) { NodeBlurData *nbd= MEM_callocN(sizeof(NodeBlurData), "node blur patch"); nbd->sizex= node->custom1; nbd->sizey= node->custom2; nbd->filtertype= R_FILTER_QUAD; node->storage= nbd; } } else if (node->type==CMP_NODE_VECBLUR) { if (node->storage==NULL) { NodeBlurData *nbd= MEM_callocN(sizeof(NodeBlurData), "node blur patch"); nbd->samples= node->custom1; nbd->maxspeed= node->custom2; nbd->fac= 1.0f; node->storage= nbd; } } } } } static void ntree_version_242(bNodeTree *ntree) { bNode *node; if (ntree->type==NTREE_COMPOSIT) { for (node= ntree->nodes.first; node; node= node->next) { if (node->type==CMP_NODE_HUE_SAT) { if (node->storage) { NodeHueSat *nhs= node->storage; if (nhs->val==0.0f) nhs->val= 1.0f; } } } } else if (ntree->type==NTREE_SHADER) { for (node= ntree->nodes.first; node; node= node->next) if (node->type == SH_NODE_GEOMETRY && node->storage == NULL) node->storage= MEM_callocN(sizeof(NodeGeometry), "NodeGeometry"); } } static void ntree_version_245(FileData *fd, Library *lib, bNodeTree *ntree) { bNode *node; NodeTwoFloats *ntf; ID *nodeid; Image *image; ImageUser *iuser; if (ntree->type==NTREE_COMPOSIT) { for (node= ntree->nodes.first; node; node= node->next) { if (node->type == CMP_NODE_ALPHAOVER) { if (!node->storage) { ntf= MEM_callocN(sizeof(NodeTwoFloats), "NodeTwoFloats"); node->storage= ntf; if (node->custom1) ntf->x= 1.0f; } } /* fix for temporary flag changes during 245 cycle */ nodeid= blo_do_versions_newlibadr(fd, lib, node->id); if (node->storage && nodeid && GS(nodeid->name) == ID_IM) { image= (Image*)nodeid; iuser= node->storage; if (iuser->flag & IMA_OLD_PREMUL) { iuser->flag &= ~IMA_OLD_PREMUL; iuser->flag |= IMA_DO_PREMUL; } if (iuser->flag & IMA_DO_PREMUL) { image->flag &= ~IMA_OLD_PREMUL; image->flag |= IMA_DO_PREMUL; } } } } } static void idproperties_fix_groups_lengths_recurse(IDProperty *prop) { IDProperty *loop; int i; for (loop=prop->data.group.first, i=0; loop; loop=loop->next, i++) { if (loop->type == IDP_GROUP) idproperties_fix_groups_lengths_recurse(loop); } if (prop->len != i) { printf("Found and fixed bad id property group length.\n"); prop->len = i; } } static void idproperties_fix_group_lengths(ListBase idlist) { ID *id; for (id=idlist.first; id; id=id->next) { if (id->properties) { idproperties_fix_groups_lengths_recurse(id->properties); } } } static void alphasort_version_246(FileData *fd, Library *lib, Mesh *me) { Material *ma; MFace *mf; MTFace *tf; int a, b, texalpha; /* verify we have a tface layer */ for (b=0; bfdata.totlayer; b++) if (me->fdata.layers[b].type == CD_MTFACE) break; if (b == me->fdata.totlayer) return; /* if we do, set alpha sort if the game engine did it before */ for (a=0, mf=me->mface; atotface; a++, mf++) { if (mf->mat_nr < me->totcol) { ma= blo_do_versions_newlibadr(fd, lib, me->mat[mf->mat_nr]); texalpha = 0; /* we can't read from this if it comes from a library, * because direct_link might not have happened on it, * so ma->mtex is not pointing to valid memory yet */ if (ma && ma->id.lib) ma= NULL; for (b=0; ma && bmtex && ma->mtex[b] && ma->mtex[b]->mapto & MAP_ALPHA) texalpha = 1; } else { ma= NULL; texalpha = 0; } for (b=0; bfdata.totlayer; b++) { if (me->fdata.layers[b].type == CD_MTFACE) { tf = ((MTFace*)me->fdata.layers[b].data) + a; tf->mode &= ~TF_ALPHASORT; if (ma && (ma->mode & MA_ZTRANSP)) if (ELEM(tf->transp, TF_ALPHA, TF_ADD) || (texalpha && (tf->transp != TF_CLIP))) tf->mode |= TF_ALPHASORT; } } } } static void customdata_version_242(Mesh *me) { CustomDataLayer *layer; MTFace *mtf; MCol *mcol; TFace *tf; int a, mtfacen, mcoln; if (!me->vdata.totlayer) { CustomData_add_layer(&me->vdata, CD_MVERT, CD_ASSIGN, me->mvert, me->totvert); if (me->msticky) CustomData_add_layer(&me->vdata, CD_MSTICKY, CD_ASSIGN, me->msticky, me->totvert); if (me->dvert) CustomData_add_layer(&me->vdata, CD_MDEFORMVERT, CD_ASSIGN, me->dvert, me->totvert); } if (!me->edata.totlayer) CustomData_add_layer(&me->edata, CD_MEDGE, CD_ASSIGN, me->medge, me->totedge); if (!me->fdata.totlayer) { CustomData_add_layer(&me->fdata, CD_MFACE, CD_ASSIGN, me->mface, me->totface); if (me->tface) { if (me->mcol) MEM_freeN(me->mcol); me->mcol= CustomData_add_layer(&me->fdata, CD_MCOL, CD_CALLOC, NULL, me->totface); me->mtface= CustomData_add_layer(&me->fdata, CD_MTFACE, CD_CALLOC, NULL, me->totface); mtf= me->mtface; mcol= me->mcol; tf= me->tface; for (a=0; a < me->totface; a++, mtf++, tf++, mcol+=4) { memcpy(mcol, tf->col, sizeof(tf->col)); memcpy(mtf->uv, tf->uv, sizeof(tf->uv)); mtf->flag= tf->flag; mtf->unwrap= tf->unwrap; mtf->mode= tf->mode; mtf->tile= tf->tile; mtf->tpage= tf->tpage; mtf->transp= tf->transp; } MEM_freeN(me->tface); me->tface= NULL; } else if (me->mcol) { me->mcol= CustomData_add_layer(&me->fdata, CD_MCOL, CD_ASSIGN, me->mcol, me->totface); } } if (me->tface) { MEM_freeN(me->tface); me->tface= NULL; } for (a=0, mtfacen=0, mcoln=0; a < me->fdata.totlayer; a++) { layer= &me->fdata.layers[a]; if (layer->type == CD_MTFACE) { if (layer->name[0] == 0) { if (mtfacen == 0) strcpy(layer->name, "UVMap"); else BLI_snprintf(layer->name, sizeof(layer->name), "UVMap.%.3d", mtfacen); } mtfacen++; } else if (layer->type == CD_MCOL) { if (layer->name[0] == 0) { if (mcoln == 0) strcpy(layer->name, "Col"); else BLI_snprintf(layer->name, sizeof(layer->name), "Col.%.3d", mcoln); } mcoln++; } } mesh_update_customdata_pointers(me, TRUE); } /*only copy render texface layer from active*/ static void customdata_version_243(Mesh *me) { CustomDataLayer *layer; int a; for (a=0; a < me->fdata.totlayer; a++) { layer= &me->fdata.layers[a]; layer->active_rnd = layer->active; } } /* struct NodeImageAnim moved to ImageUser, and we make it default available */ static void do_version_ntree_242_2(bNodeTree *ntree) { bNode *node; if (ntree->type==NTREE_COMPOSIT) { for (node= ntree->nodes.first; node; node= node->next) { if (ELEM3(node->type, CMP_NODE_IMAGE, CMP_NODE_VIEWER, CMP_NODE_SPLITVIEWER)) { /* only image had storage */ if (node->storage) { NodeImageAnim *nia= node->storage; ImageUser *iuser= MEM_callocN(sizeof(ImageUser), "ima user node"); iuser->frames= nia->frames; iuser->sfra= nia->sfra; iuser->offset= nia->nr-1; iuser->cycl= nia->cyclic; iuser->fie_ima= 2; iuser->ok= 1; node->storage= iuser; MEM_freeN(nia); } else { ImageUser *iuser= node->storage= MEM_callocN(sizeof(ImageUser), "node image user"); iuser->sfra= 1; iuser->fie_ima= 2; iuser->ok= 1; } } } } } static void do_version_free_effect_245(Effect *eff) { PartEff *paf; if (eff->type==EFF_PARTICLE) { paf= (PartEff *)eff; if (paf->keys) MEM_freeN(paf->keys); } MEM_freeN(eff); } static void do_version_free_effects_245(ListBase *lb) { Effect *eff; eff= lb->first; while (eff) { BLI_remlink(lb, eff); do_version_free_effect_245(eff); eff= lb->first; } } PartEff *blo_do_version_give_parteff_245(Object *ob) { PartEff *paf; paf= ob->effect.first; while (paf) { if (paf->type==EFF_PARTICLE) return paf; paf= paf->next; } return NULL; } /* NOTE: this version patch is intended for versions < 2.52.2, but was initially introduced in 2.27 already */ void blo_do_version_old_trackto_to_constraints(Object *ob) { /* create new trackto constraint from the relationship */ if (ob->track) { bConstraint *con= add_ob_constraint(ob, "AutoTrack", CONSTRAINT_TYPE_TRACKTO); bTrackToConstraint *data = con->data; /* copy tracking settings from the object */ data->tar = ob->track; data->reserved1 = ob->trackflag; data->reserved2 = ob->upflag; } /* clear old track setting */ ob->track = NULL; } void blo_do_versions_pre250(FileData *fd, Library *lib, Main *main) { /* WATCH IT!!!: pointers from libdata have not been converted */ if (main->versionfile == 100) { /* tex->extend and tex->imageflag have changed: */ Tex *tex = main->tex.first; while (tex) { if (tex->id.flag & LIB_NEEDLINK) { if (tex->extend==0) { if (tex->xrepeat || tex->yrepeat) tex->extend= TEX_REPEAT; else { tex->extend= TEX_EXTEND; tex->xrepeat= tex->yrepeat= 1; } } } tex= tex->id.next; } } if (main->versionfile <= 101) { /* frame mapping */ Scene *sce = main->scene.first; while (sce) { sce->r.framapto= 100; sce->r.images= 100; sce->r.framelen= 1.0; sce= sce->id.next; } } if (main->versionfile <= 102) { /* init halo's at 1.0 */ Material *ma = main->mat.first; while (ma) { ma->add= 1.0; ma= ma->id.next; } } if (main->versionfile <= 103) { /* new variable in object: colbits */ Object *ob = main->object.first; int a; while (ob) { ob->colbits= 0; if (ob->totcol) { for (a=0; atotcol; a++) { if (ob->mat[a]) ob->colbits |= (1<id.next; } } if (main->versionfile <= 104) { /* timeoffs moved */ Object *ob = main->object.first; while (ob) { if (ob->transflag & 1) { ob->transflag -= 1; //ob->ipoflag |= OB_OFFS_OB; } ob= ob->id.next; } } if (main->versionfile <= 105) { Object *ob = main->object.first; while (ob) { ob->dupon= 1; ob->dupoff= 0; ob->dupsta= 1; ob->dupend= 100; ob= ob->id.next; } } if (main->versionfile <= 106) { /* mcol changed */ Mesh *me = main->mesh.first; while (me) { if (me->mcol) vcol_to_fcol(me); me= me->id.next; } } if (main->versionfile <= 107) { Object *ob; Scene *sce = main->scene.first; while (sce) { sce->r.mode |= R_GAMMA; sce= sce->id.next; } ob= main->object.first; while (ob) { //ob->ipoflag |= OB_OFFS_PARENT; if (ob->dt==0) ob->dt= OB_SOLID; ob= ob->id.next; } } if (main->versionfile <= 109) { /* new variable: gridlines */ bScreen *sc = main->screen.first; while (sc) { ScrArea *sa= sc->areabase.first; while (sa) { SpaceLink *sl= sa->spacedata.first; while (sl) { if (sl->spacetype==SPACE_VIEW3D) { View3D *v3d= (View3D*) sl; if (v3d->gridlines==0) v3d->gridlines= 20; } sl= sl->next; } sa= sa->next; } sc= sc->id.next; } } if (main->versionfile <= 113) { Material *ma = main->mat.first; while (ma) { if (ma->flaresize==0.0f) ma->flaresize= 1.0f; ma->subsize= 1.0f; ma->flareboost= 1.0f; ma= ma->id.next; } } if (main->versionfile <= 134) { Tex *tex = main->tex.first; while (tex) { if ((tex->rfac == 0.0f) && (tex->gfac == 0.0f) && (tex->bfac == 0.0f)) { tex->rfac = 1.0f; tex->gfac = 1.0f; tex->bfac = 1.0f; tex->filtersize = 1.0f; } tex = tex->id.next; } } if (main->versionfile <= 140) { /* r-g-b-fac in texture */ Tex *tex = main->tex.first; while (tex) { if ((tex->rfac == 0.0f) && (tex->gfac == 0.0f) && (tex->bfac == 0.0f)) { tex->rfac = 1.0f; tex->gfac = 1.0f; tex->bfac = 1.0f; tex->filtersize = 1.0f; } tex = tex->id.next; } } if (main->versionfile <= 153) { Scene *sce = main->scene.first; while (sce) { if (sce->r.blurfac==0.0f) sce->r.blurfac= 1.0f; sce= sce->id.next; } } if (main->versionfile <= 163) { Scene *sce = main->scene.first; while (sce) { if (sce->r.frs_sec==0) sce->r.frs_sec= 25; sce= sce->id.next; } } if (main->versionfile <= 164) { Mesh *me= main->mesh.first; while (me) { me->smoothresh= 30; me= me->id.next; } } if (main->versionfile <= 165) { Mesh *me= main->mesh.first; TFace *tface; int nr; char *cp; while (me) { if (me->tface) { nr= me->totface; tface= me->tface; while (nr--) { cp= (char *)&tface->col[0]; if (cp[1]>126) cp[1]= 255; else cp[1]*=2; if (cp[2]>126) cp[2]= 255; else cp[2]*=2; if (cp[3]>126) cp[3]= 255; else cp[3]*=2; cp= (char *)&tface->col[1]; if (cp[1]>126) cp[1]= 255; else cp[1]*=2; if (cp[2]>126) cp[2]= 255; else cp[2]*=2; if (cp[3]>126) cp[3]= 255; else cp[3]*=2; cp= (char *)&tface->col[2]; if (cp[1]>126) cp[1]= 255; else cp[1]*=2; if (cp[2]>126) cp[2]= 255; else cp[2]*=2; if (cp[3]>126) cp[3]= 255; else cp[3]*=2; cp= (char *)&tface->col[3]; if (cp[1]>126) cp[1]= 255; else cp[1]*=2; if (cp[2]>126) cp[2]= 255; else cp[2]*=2; if (cp[3]>126) cp[3]= 255; else cp[3]*=2; tface++; } } me= me->id.next; } } if (main->versionfile <= 169) { Mesh *me= main->mesh.first; while (me) { if (me->subdiv==0) me->subdiv= 1; me= me->id.next; } } if (main->versionfile <= 169) { bScreen *sc= main->screen.first; while (sc) { ScrArea *sa= sc->areabase.first; while (sa) { SpaceLink *sl= sa->spacedata.first; while (sl) { if (sl->spacetype==SPACE_IPO) { SpaceIpo *sipo= (SpaceIpo*) sl; sipo->v2d.max[0]= 15000.0; } sl= sl->next; } sa= sa->next; } sc= sc->id.next; } } if (main->versionfile <= 170) { Object *ob = main->object.first; PartEff *paf; while (ob) { paf = blo_do_version_give_parteff_245(ob); if (paf) { if (paf->staticstep == 0) { paf->staticstep= 5; } } ob = ob->id.next; } } if (main->versionfile <= 171) { bScreen *sc= main->screen.first; while (sc) { ScrArea *sa= sc->areabase.first; while (sa) { SpaceLink *sl= sa->spacedata.first; while (sl) { if (sl->spacetype==SPACE_TEXT) { SpaceText *st= (SpaceText*) sl; st->lheight= 12; } sl= sl->next; } sa= sa->next; } sc= sc->id.next; } } if (main->versionfile <= 173) { int a, b; Mesh *me= main->mesh.first; while (me) { if (me->tface) { TFace *tface= me->tface; for (a=0; atotface; a++, tface++) { for (b=0; b<4; b++) { tface->uv[b][0]/= 32767.0f; tface->uv[b][1]/= 32767.0f; } } } me= me->id.next; } } if (main->versionfile <= 191) { Object *ob= main->object.first; Material *ma = main->mat.first; /* let faces have default add factor of 0.0 */ while (ma) { if (!(ma->mode & MA_HALO)) ma->add = 0.0; ma = ma->id.next; } while (ob) { ob->mass= 1.0f; ob->damping= 0.1f; /*ob->quat[1]= 1.0f;*/ /* quats arnt used yet */ ob= ob->id.next; } } if (main->versionfile <= 193) { Object *ob= main->object.first; while (ob) { ob->inertia= 1.0f; ob->rdamping= 0.1f; ob= ob->id.next; } } if (main->versionfile <= 196) { Mesh *me= main->mesh.first; int a, b; while (me) { if (me->tface) { TFace *tface= me->tface; for (a=0; atotface; a++, tface++) { for (b=0; b<4; b++) { tface->mode |= TF_DYNAMIC; tface->mode &= ~TF_INVISIBLE; } } } me= me->id.next; } } if (main->versionfile <= 200) { Object *ob= main->object.first; while (ob) { ob->scaflag = ob->gameflag & (OB_DO_FH|OB_ROT_FH|OB_ANISOTROPIC_FRICTION|OB_GHOST|OB_RIGID_BODY|OB_BOUNDS); /* 64 is do_fh */ ob->gameflag &= ~(OB_ROT_FH|OB_ANISOTROPIC_FRICTION|OB_GHOST|OB_RIGID_BODY|OB_BOUNDS); ob = ob->id.next; } } if (main->versionfile <= 201) { /* add-object + end-object are joined to edit-object actuator */ Object *ob = main->object.first; bProperty *prop; bActuator *act; bIpoActuator *ia; bEditObjectActuator *eoa; bAddObjectActuator *aoa; while (ob) { act = ob->actuators.first; while (act) { if (act->type==ACT_IPO) { ia= act->data; prop= get_ob_property(ob, ia->name); if (prop) { ia->type= ACT_IPO_FROM_PROP; } } else if (act->type==ACT_ADD_OBJECT) { aoa= act->data; eoa= MEM_callocN(sizeof(bEditObjectActuator), "edit ob act"); eoa->type= ACT_EDOB_ADD_OBJECT; eoa->ob= aoa->ob; eoa->time= aoa->time; MEM_freeN(aoa); act->data= eoa; act->type= act->otype= ACT_EDIT_OBJECT; } else if (act->type==ACT_END_OBJECT) { eoa= MEM_callocN(sizeof(bEditObjectActuator), "edit ob act"); eoa->type= ACT_EDOB_END_OBJECT; act->data= eoa; act->type= act->otype= ACT_EDIT_OBJECT; } act= act->next; } ob = ob->id.next; } } if (main->versionfile <= 202) { /* add-object and end-object are joined to edit-object * actuator */ Object *ob= main->object.first; bActuator *act; bObjectActuator *oa; while (ob) { act= ob->actuators.first; while (act) { if (act->type==ACT_OBJECT) { oa= act->data; oa->flag &= ~(ACT_TORQUE_LOCAL|ACT_DROT_LOCAL); /* this actuator didn't do local/glob rot before */ } act= act->next; } ob= ob->id.next; } } if (main->versionfile <= 204) { /* patches for new physics */ Object *ob= main->object.first; bActuator *act; bObjectActuator *oa; bSound *sound; while (ob) { /* please check this for demo20 files like * original Egypt levels etc. converted * rotation factor of 50 is not workable */ act= ob->actuators.first; while (act) { if (act->type==ACT_OBJECT) { oa= act->data; oa->forceloc[0]*= 25.0f; oa->forceloc[1]*= 25.0f; oa->forceloc[2]*= 25.0f; oa->forcerot[0]*= 10.0f; oa->forcerot[1]*= 10.0f; oa->forcerot[2]*= 10.0f; } act= act->next; } ob= ob->id.next; } sound = main->sound.first; while (sound) { if (sound->volume < 0.01f) { sound->volume = 1.0f; } sound = sound->id.next; } } if (main->versionfile <= 205) { /* patches for new physics */ Object *ob= main->object.first; bActuator *act; bSensor *sens; bEditObjectActuator *oa; bRaySensor *rs; bCollisionSensor *cs; while (ob) { /* Set anisotropic friction off for old objects, * values to 1.0. */ ob->gameflag &= ~OB_ANISOTROPIC_FRICTION; ob->anisotropicFriction[0] = 1.0; ob->anisotropicFriction[1] = 1.0; ob->anisotropicFriction[2] = 1.0; act= ob->actuators.first; while (act) { if (act->type==ACT_EDIT_OBJECT) { /* Zero initial velocity for newly * added objects */ oa= act->data; oa->linVelocity[0] = 0.0; oa->linVelocity[1] = 0.0; oa->linVelocity[2] = 0.0; oa->localflag = 0; } act= act->next; } sens= ob->sensors.first; while (sens) { /* Extra fields for radar sensors. */ if (sens->type == SENS_RADAR) { bRadarSensor *s = sens->data; s->range = 10000.0; } /* Pulsing: defaults for new sensors. */ if (sens->type != SENS_ALWAYS) { sens->pulse = 0; sens->freq = 0; } else { sens->pulse = 1; } /* Invert: off. */ sens->invert = 0; /* Collision and ray: default = trigger * on property. The material field can * remain empty. */ if (sens->type == SENS_COLLISION) { cs = (bCollisionSensor*) sens->data; cs->mode = 0; } if (sens->type == SENS_RAY) { rs = (bRaySensor*) sens->data; rs->mode = 0; } sens = sens->next; } ob= ob->id.next; } /* have to check the exact multiplier */ } if (main->versionfile <= 211) { /* Render setting: per scene, the applicable gamma value * can be set. Default is 1.0, which means no * correction. */ bActuator *act; bObjectActuator *oa; Object *ob; /* added alpha in obcolor */ ob= main->object.first; while (ob) { ob->col[3]= 1.0; ob= ob->id.next; } /* added alpha in obcolor */ ob= main->object.first; while (ob) { act= ob->actuators.first; while (act) { if (act->type==ACT_OBJECT) { /* multiply velocity with 50 in old files */ oa= act->data; if (fabsf(oa->linearvelocity[0]) >= 0.01f) oa->linearvelocity[0] *= 50.0f; if (fabsf(oa->linearvelocity[1]) >= 0.01f) oa->linearvelocity[1] *= 50.0f; if (fabsf(oa->linearvelocity[2]) >= 0.01f) oa->linearvelocity[2] *= 50.0f; if (fabsf(oa->angularvelocity[0])>=0.01f) oa->angularvelocity[0] *= 50.0f; if (fabsf(oa->angularvelocity[1])>=0.01f) oa->angularvelocity[1] *= 50.0f; if (fabsf(oa->angularvelocity[2])>=0.01f) oa->angularvelocity[2] *= 50.0f; } act= act->next; } ob= ob->id.next; } } if (main->versionfile <= 212) { bSound* sound; bProperty *prop; Object *ob; Mesh *me; sound = main->sound.first; while (sound) { sound->max_gain = 1.0; sound->min_gain = 0.0; sound->distance = 1.0; if (sound->attenuation > 0.0f) sound->flags |= SOUND_FLAGS_3D; else sound->flags &= ~SOUND_FLAGS_3D; sound = sound->id.next; } ob = main->object.first; while (ob) { prop= ob->prop.first; while (prop) { if (prop->type == GPROP_TIME) { // convert old GPROP_TIME values from int to float *((float *)&prop->data) = (float) prop->data; } prop= prop->next; } ob = ob->id.next; } /* me->subdiv changed to reflect the actual reparametization * better, and smeshes were removed - if it was a smesh make * it a subsurf, and reset the subdiv level because subsurf * takes a lot more work to calculate. */ for (me= main->mesh.first; me; me= me->id.next) { if (me->flag&ME_SMESH) { me->flag&= ~ME_SMESH; me->flag|= ME_SUBSURF; me->subdiv= 1; } else { if (me->subdiv<2) me->subdiv= 1; else me->subdiv--; } } } if (main->versionfile <= 220) { Object *ob; Mesh *me; ob = main->object.first; /* adapt form factor in order to get the 'old' physics * behavior back...*/ while (ob) { /* in future, distinguish between different * object bounding shapes */ ob->formfactor = 0.4f; /* patch form factor, note that inertia equiv radius * of a rotation symmetrical obj */ if (ob->inertia != 1.0f) { ob->formfactor /= ob->inertia * ob->inertia; } ob = ob->id.next; } /* Began using alpha component of vertex colors, but * old file vertex colors are undefined, reset them * to be fully opaque. -zr */ for (me= main->mesh.first; me; me= me->id.next) { if (me->mcol) { int i; for (i=0; itotface*4; i++) { MCol *mcol= &me->mcol[i]; mcol->a= 255; } } if (me->tface) { int i, j; for (i=0; itotface; i++) { TFace *tf= &((TFace*) me->tface)[i]; for (j=0; j<4; j++) { char *col= (char*) &tf->col[j]; col[0]= 255; } } } } } if (main->versionfile <= 221) { Scene *sce= main->scene.first; // new variables for std-alone player and runtime while (sce) { sce->r.xplay= 640; sce->r.yplay= 480; sce->r.freqplay= 60; sce= sce->id.next; } } if (main->versionfile <= 222) { Scene *sce= main->scene.first; // new variables for std-alone player and runtime while (sce) { sce->r.depth= 32; sce= sce->id.next; } } if (main->versionfile <= 223) { VFont *vf; Image *ima; Object *ob; for (vf= main->vfont.first; vf; vf= vf->id.next) { if (strcmp(vf->name+strlen(vf->name)-6, ".Bfont")==0) { strcpy(vf->name, FO_BUILTIN_NAME); } } /* Old textures animate at 25 FPS */ for (ima = main->image.first; ima; ima=ima->id.next) { ima->animspeed = 25; } /* Zr remapped some keyboard codes to be linear (stupid zr) */ for (ob= main->object.first; ob; ob= ob->id.next) { bSensor *sens; for (sens= ob->sensors.first; sens; sens= sens->next) { if (sens->type==SENS_KEYBOARD) { bKeyboardSensor *ks= sens->data; ks->key= map_223_keybd_code_to_224_keybd_code(ks->key); ks->qual= map_223_keybd_code_to_224_keybd_code(ks->qual); ks->qual2= map_223_keybd_code_to_224_keybd_code(ks->qual2); } } } } if (main->versionfile <= 224) { bSound* sound; Scene *sce; Mesh *me; bScreen *sc; for (sound=main->sound.first; sound; sound=sound->id.next) { if (sound->packedfile) { if (sound->newpackedfile == NULL) { sound->newpackedfile = sound->packedfile; } sound->packedfile = NULL; } } /* Make sure that old subsurf meshes don't have zero subdivision level for rendering */ for (me=main->mesh.first; me; me=me->id.next) { if ((me->flag & ME_SUBSURF) && (me->subdivr==0)) me->subdivr=me->subdiv; } for (sce= main->scene.first; sce; sce= sce->id.next) { sce->r.stereomode = 1; // no stereo } /* some oldfile patch, moved from set_func_space */ for (sc= main->screen.first; sc; sc= sc->id.next) { ScrArea *sa; for (sa= sc->areabase.first; sa; sa= sa->next) { SpaceLink *sl; for (sl= sa->spacedata.first; sl; sl= sl->next) { if (sl->spacetype==SPACE_IPO) { SpaceSeq *sseq= (SpaceSeq*) sl; sseq->v2d.keeptot= 0; } } } } } if (main->versionfile <= 225) { World *wo; /* Use Sumo for old games */ for (wo = main->world.first; wo; wo= wo->id.next) { wo->physicsEngine = 2; } } if (main->versionfile <= 227) { Scene *sce; Material *ma; bScreen *sc; Object *ob; /* As of now, this insures that the transition from the old Track system * to the new full constraint Track is painless for everyone. - theeth */ ob = main->object.first; while (ob) { ListBase *list; list = &ob->constraints; /* check for already existing TrackTo constraint * set their track and up flag correctly */ if (list) { bConstraint *curcon; for (curcon = list->first; curcon; curcon=curcon->next) { if (curcon->type == CONSTRAINT_TYPE_TRACKTO) { bTrackToConstraint *data = curcon->data; data->reserved1 = ob->trackflag; data->reserved2 = ob->upflag; } } } if (ob->type == OB_ARMATURE) { if (ob->pose) { bConstraint *curcon; bPoseChannel *pchan; for (pchan = ob->pose->chanbase.first; pchan; pchan=pchan->next) { for (curcon = pchan->constraints.first; curcon; curcon=curcon->next) { if (curcon->type == CONSTRAINT_TYPE_TRACKTO) { bTrackToConstraint *data = curcon->data; data->reserved1 = ob->trackflag; data->reserved2 = ob->upflag; } } } } } /* Change Ob->Track in real TrackTo constraint */ blo_do_version_old_trackto_to_constraints(ob); ob = ob->id.next; } for (sce= main->scene.first; sce; sce= sce->id.next) { sce->audio.mixrate = 44100; sce->audio.flag |= AUDIO_SCRUB; sce->r.mode |= R_ENVMAP; } // init new shader vars for (ma= main->mat.first; ma; ma= ma->id.next) { ma->refrac= 4.0f; ma->roughness= 0.5f; ma->param[0]= 0.5f; ma->param[1]= 0.1f; ma->param[2]= 0.1f; ma->param[3]= 0.05f; } // patch for old wrong max view2d settings, allows zooming out more for (sc= main->screen.first; sc; sc= sc->id.next) { ScrArea *sa; for (sa= sc->areabase.first; sa; sa= sa->next) { SpaceLink *sl; for (sl= sa->spacedata.first; sl; sl= sl->next) { if (sl->spacetype==SPACE_ACTION) { SpaceAction *sac= (SpaceAction *) sl; sac->v2d.max[0]= 32000; } else if (sl->spacetype==SPACE_NLA) { SpaceNla *sla= (SpaceNla *) sl; sla->v2d.max[0]= 32000; } } } } } if (main->versionfile <= 228) { Scene *sce; bScreen *sc; Object *ob; /* As of now, this insures that the transition from the old Track system * to the new full constraint Track is painless for everyone.*/ ob = main->object.first; while (ob) { ListBase *list; list = &ob->constraints; /* check for already existing TrackTo constraint * set their track and up flag correctly */ if (list) { bConstraint *curcon; for (curcon = list->first; curcon; curcon=curcon->next) { if (curcon->type == CONSTRAINT_TYPE_TRACKTO) { bTrackToConstraint *data = curcon->data; data->reserved1 = ob->trackflag; data->reserved2 = ob->upflag; } } } if (ob->type == OB_ARMATURE) { if (ob->pose) { bConstraint *curcon; bPoseChannel *pchan; for (pchan = ob->pose->chanbase.first; pchan; pchan=pchan->next) { for (curcon = pchan->constraints.first; curcon; curcon=curcon->next) { if (curcon->type == CONSTRAINT_TYPE_TRACKTO) { bTrackToConstraint *data = curcon->data; data->reserved1 = ob->trackflag; data->reserved2 = ob->upflag; } } } } } ob = ob->id.next; } for (sce= main->scene.first; sce; sce= sce->id.next) { sce->r.mode |= R_ENVMAP; } // convert old mainb values for new button panels for (sc= main->screen.first; sc; sc= sc->id.next) { ScrArea *sa; for (sa= sc->areabase.first; sa; sa= sa->next) { SpaceLink *sl; for (sl= sa->spacedata.first; sl; sl= sl->next) { if (sl->spacetype==SPACE_BUTS) { SpaceButs *sbuts= (SpaceButs *) sl; sbuts->v2d.maxzoom= 1.2f; sbuts->align= 1; /* horizontal default */ if (sbuts->mainb==BUTS_LAMP) { sbuts->mainb= CONTEXT_SHADING; //sbuts->tab[CONTEXT_SHADING]= TAB_SHADING_LAMP; } else if (sbuts->mainb==BUTS_MAT) { sbuts->mainb= CONTEXT_SHADING; //sbuts->tab[CONTEXT_SHADING]= TAB_SHADING_MAT; } else if (sbuts->mainb==BUTS_TEX) { sbuts->mainb= CONTEXT_SHADING; //sbuts->tab[CONTEXT_SHADING]= TAB_SHADING_TEX; } else if (sbuts->mainb==BUTS_ANIM) { sbuts->mainb= CONTEXT_OBJECT; } else if (sbuts->mainb==BUTS_WORLD) { sbuts->mainb= CONTEXT_SCENE; //sbuts->tab[CONTEXT_SCENE]= TAB_SCENE_WORLD; } else if (sbuts->mainb==BUTS_RENDER) { sbuts->mainb= CONTEXT_SCENE; //sbuts->tab[CONTEXT_SCENE]= TAB_SCENE_RENDER; } else if (sbuts->mainb==BUTS_GAME) { sbuts->mainb= CONTEXT_LOGIC; } else if (sbuts->mainb==BUTS_FPAINT) { sbuts->mainb= CONTEXT_EDITING; } else if (sbuts->mainb==BUTS_RADIO) { sbuts->mainb= CONTEXT_SHADING; //sbuts->tab[CONTEXT_SHADING]= TAB_SHADING_RAD; } else if (sbuts->mainb==BUTS_CONSTRAINT) { sbuts->mainb= CONTEXT_OBJECT; } else if (sbuts->mainb==BUTS_SCRIPT) { sbuts->mainb= CONTEXT_OBJECT; } else if (sbuts->mainb==BUTS_EDIT) { sbuts->mainb= CONTEXT_EDITING; } else sbuts->mainb= CONTEXT_SCENE; } } } } } /* ton: made this 230 instead of 229, * to be sure (tuho files) and this is a reliable check anyway * nevertheless, we might need to think over a fitness (initialize) * check apart from the do_versions() */ if (main->versionfile <= 230) { bScreen *sc; // new variable blockscale, for panels in any area for (sc= main->screen.first; sc; sc= sc->id.next) { ScrArea *sa; for (sa= sc->areabase.first; sa; sa= sa->next) { SpaceLink *sl; for (sl= sa->spacedata.first; sl; sl= sl->next) { if (sl->blockscale==0.0f) sl->blockscale= 0.7f; /* added: 5x better zoom in for action */ if (sl->spacetype==SPACE_ACTION) { SpaceAction *sac= (SpaceAction *)sl; sac->v2d.maxzoom= 50; } } } } } if (main->versionfile <= 231) { /* new bit flags for showing/hiding grid floor and axes */ bScreen *sc = main->screen.first; while (sc) { ScrArea *sa= sc->areabase.first; while (sa) { SpaceLink *sl= sa->spacedata.first; while (sl) { if (sl->spacetype==SPACE_VIEW3D) { View3D *v3d= (View3D*) sl; if (v3d->gridflag==0) { v3d->gridflag |= V3D_SHOW_X; v3d->gridflag |= V3D_SHOW_Y; v3d->gridflag |= V3D_SHOW_FLOOR; v3d->gridflag &= ~V3D_SHOW_Z; } } sl= sl->next; } sa= sa->next; } sc= sc->id.next; } } if (main->versionfile <= 231) { Material *ma= main->mat.first; bScreen *sc = main->screen.first; Scene *sce; Lamp *la; World *wrld; /* introduction of raytrace */ while (ma) { if (ma->fresnel_tra_i==0.0f) ma->fresnel_tra_i= 1.25f; if (ma->fresnel_mir_i==0.0f) ma->fresnel_mir_i= 1.25f; ma->ang= 1.0; ma->ray_depth= 2; ma->ray_depth_tra= 2; ma->fresnel_tra= 0.0; ma->fresnel_mir= 0.0; ma= ma->id.next; } sce= main->scene.first; while (sce) { if (sce->r.gauss==0.0f) sce->r.gauss= 1.0f; sce= sce->id.next; } la= main->lamp.first; while (la) { if (la->k==0.0f) la->k= 1.0; if (la->ray_samp==0) la->ray_samp= 1; if (la->ray_sampy==0) la->ray_sampy= 1; if (la->ray_sampz==0) la->ray_sampz= 1; if (la->area_size==0.0f) la->area_size= 1.0f; if (la->area_sizey==0.0f) la->area_sizey= 1.0f; if (la->area_sizez==0.0f) la->area_sizez= 1.0f; la= la->id.next; } wrld= main->world.first; while (wrld) { if (wrld->range==0.0f) { wrld->range= 1.0f/wrld->exposure; } wrld= wrld->id.next; } /* new bit flags for showing/hiding grid floor and axes */ while (sc) { ScrArea *sa= sc->areabase.first; while (sa) { SpaceLink *sl= sa->spacedata.first; while (sl) { if (sl->spacetype==SPACE_VIEW3D) { View3D *v3d= (View3D*) sl; if (v3d->gridflag==0) { v3d->gridflag |= V3D_SHOW_X; v3d->gridflag |= V3D_SHOW_Y; v3d->gridflag |= V3D_SHOW_FLOOR; v3d->gridflag &= ~V3D_SHOW_Z; } } sl= sl->next; } sa= sa->next; } sc= sc->id.next; } } if (main->versionfile <= 232) { Tex *tex= main->tex.first; World *wrld= main->world.first; bScreen *sc; Scene *sce; while (tex) { if ((tex->flag & (TEX_CHECKER_ODD+TEX_CHECKER_EVEN))==0) { tex->flag |= TEX_CHECKER_ODD; } /* copied from kernel texture.c */ if (tex->ns_outscale==0.0f) { /* musgrave */ tex->mg_H = 1.0f; tex->mg_lacunarity = 2.0f; tex->mg_octaves = 2.0f; tex->mg_offset = 1.0f; tex->mg_gain = 1.0f; tex->ns_outscale = 1.0f; /* distnoise */ tex->dist_amount = 1.0f; /* voronoi */ tex->vn_w1 = 1.0f; tex->vn_mexp = 2.5f; } tex= tex->id.next; } while (wrld) { if (wrld->aodist==0.0f) { wrld->aodist= 10.0f; wrld->aobias= 0.05f; } if (wrld->aosamp==0) wrld->aosamp= 5; if (wrld->aoenergy==0.0f) wrld->aoenergy= 1.0f; wrld= wrld->id.next; } // new variable blockscale, for panels in any area, do again because new // areas didnt initialize it to 0.7 yet for (sc= main->screen.first; sc; sc= sc->id.next) { ScrArea *sa; for (sa= sc->areabase.first; sa; sa= sa->next) { SpaceLink *sl; for (sl= sa->spacedata.first; sl; sl= sl->next) { if (sl->blockscale==0.0f) sl->blockscale= 0.7f; /* added: 5x better zoom in for nla */ if (sl->spacetype==SPACE_NLA) { SpaceNla *snla= (SpaceNla *)sl; snla->v2d.maxzoom= 50; } } } } sce= main->scene.first; while (sce) { if (sce->r.ocres==0) sce->r.ocres= 64; sce= sce->id.next; } } if (main->versionfile <= 233) { bScreen *sc; Material *ma= main->mat.first; /* Object *ob= main->object.first; */ while (ma) { if (ma->rampfac_col==0.0f) ma->rampfac_col= 1.0; if (ma->rampfac_spec==0.0f) ma->rampfac_spec= 1.0; if (ma->pr_lamp==0) ma->pr_lamp= 3; ma= ma->id.next; } /* this should have been done loooong before! */ #if 0 /* deprecated in 2.5+ */ while (ob) { if (ob->ipowin==0) ob->ipowin= ID_OB; ob= ob->id.next; } #endif for (sc= main->screen.first; sc; sc= sc->id.next) { ScrArea *sa; for (sa= sc->areabase.first; sa; sa= sa->next) { SpaceLink *sl; for (sl= sa->spacedata.first; sl; sl= sl->next) { if (sl->spacetype==SPACE_VIEW3D) { View3D *v3d= (View3D *)sl; v3d->flag |= V3D_SELECT_OUTLINE; } } } } } if (main->versionfile <= 234) { World *wo; bScreen *sc; // force sumo engine to be active for (wo = main->world.first; wo; wo= wo->id.next) { if (wo->physicsEngine==0) wo->physicsEngine = 2; } for (sc= main->screen.first; sc; sc= sc->id.next) { ScrArea *sa; for (sa= sc->areabase.first; sa; sa= sa->next) { SpaceLink *sl; for (sl= sa->spacedata.first; sl; sl= sl->next) { if (sl->spacetype==SPACE_VIEW3D) { View3D *v3d= (View3D *)sl; v3d->flag |= V3D_ZBUF_SELECT; } else if (sl->spacetype==SPACE_TEXT) { SpaceText *st= (SpaceText *)sl; if (st->tabnumber==0) st->tabnumber= 2; } } } } } if (main->versionfile <= 235) { Tex *tex= main->tex.first; Scene *sce= main->scene.first; Sequence *seq; Editing *ed; while (tex) { if (tex->nabla==0.0f) tex->nabla= 0.025f; tex= tex->id.next; } while (sce) { ed= sce->ed; if (ed) { SEQ_BEGIN (sce->ed, seq) { if (seq->type==SEQ_IMAGE || seq->type==SEQ_MOVIE) seq->flag |= SEQ_MAKE_PREMUL; } SEQ_END } sce= sce->id.next; } } if (main->versionfile <= 236) { Object *ob; Camera *cam= main->camera.first; Material *ma; bScreen *sc; while (cam) { if (cam->ortho_scale==0.0f) { cam->ortho_scale= 256.0f/cam->lens; if (cam->type==CAM_ORTHO) printf("NOTE: ortho render has changed, tweak new Camera 'scale' value.\n"); } cam= cam->id.next; } /* set manipulator type */ /* force oops draw if depgraph was set*/ /* set time line var */ for (sc= main->screen.first; sc; sc= sc->id.next) { ScrArea *sa; for (sa= sc->areabase.first; sa; sa= sa->next) { SpaceLink *sl; for (sl= sa->spacedata.first; sl; sl= sl->next) { if (sl->spacetype==SPACE_VIEW3D) { View3D *v3d= (View3D *)sl; if (v3d->twtype==0) v3d->twtype= V3D_MANIP_TRANSLATE; } } } } // init new shader vars for (ma= main->mat.first; ma; ma= ma->id.next) { if (ma->darkness==0.0f) { ma->rms=0.1f; ma->darkness=1.0f; } } /* softbody init new vars */ for (ob= main->object.first; ob; ob= ob->id.next) { if (ob->soft) { if (ob->soft->defgoal==0.0f) ob->soft->defgoal= 0.7f; if (ob->soft->physics_speed==0.0f) ob->soft->physics_speed= 1.0f; if (ob->soft->interval==0) { ob->soft->interval= 2; ob->soft->sfra= 1; ob->soft->efra= 100; } } if (ob->soft && ob->soft->vertgroup==0) { bDeformGroup *locGroup = defgroup_find_name(ob, "SOFTGOAL"); if (locGroup) { /* retrieve index for that group */ ob->soft->vertgroup = 1 + BLI_findindex(&ob->defbase, locGroup); } } } } if (main->versionfile <= 237) { bArmature *arm; bConstraint *con; Object *ob; Bone *bone; // armature recode checks for (arm= main->armature.first; arm; arm= arm->id.next) { BKE_armature_where_is(arm); for (bone= arm->bonebase.first; bone; bone= bone->next) do_version_bone_head_tail_237(bone); } for (ob= main->object.first; ob; ob= ob->id.next) { if (ob->parent) { Object *parent= blo_do_versions_newlibadr(fd, lib, ob->parent); if (parent && parent->type==OB_LATTICE) ob->partype = PARSKEL; } // btw. BKE_pose_rebuild is further only called on leave editmode if (ob->type==OB_ARMATURE) { if (ob->pose) ob->pose->flag |= POSE_RECALC; ob->recalc |= OB_RECALC_OB|OB_RECALC_DATA|OB_RECALC_TIME; // cannot call stuff now (pointers!), done in setup_app_data /* new generic xray option */ arm= blo_do_versions_newlibadr(fd, lib, ob->data); if (arm->flag & ARM_DRAWXRAY) { ob->dtx |= OB_DRAWXRAY; } } else if (ob->type==OB_MESH) { Mesh *me = blo_do_versions_newlibadr(fd, lib, ob->data); if ((me->flag&ME_SUBSURF)) { SubsurfModifierData *smd = (SubsurfModifierData*) modifier_new(eModifierType_Subsurf); smd->levels = MAX2(1, me->subdiv); smd->renderLevels = MAX2(1, me->subdivr); smd->subdivType = me->subsurftype; smd->modifier.mode = 0; if (me->subdiv!=0) smd->modifier.mode |= 1; if (me->subdivr!=0) smd->modifier.mode |= 2; if (me->flag&ME_OPT_EDGES) smd->flags |= eSubsurfModifierFlag_ControlEdges; BLI_addtail(&ob->modifiers, smd); modifier_unique_name(&ob->modifiers, (ModifierData*)smd); } } // follow path constraint needs to set the 'path' option in curves... for (con=ob->constraints.first; con; con= con->next) { if (con->type==CONSTRAINT_TYPE_FOLLOWPATH) { bFollowPathConstraint *data = con->data; Object *obc= blo_do_versions_newlibadr(fd, lib, data->tar); if (obc && obc->type==OB_CURVE) { Curve *cu= blo_do_versions_newlibadr(fd, lib, obc->data); if (cu) cu->flag |= CU_PATH; } } } } } if (main->versionfile <= 238) { Lattice *lt; Object *ob; bArmature *arm; Mesh *me; Key *key; Scene *sce= main->scene.first; while (sce) { if (sce->toolsettings == NULL) { sce->toolsettings = MEM_callocN(sizeof(struct ToolSettings), "Tool Settings Struct"); sce->toolsettings->cornertype=0; sce->toolsettings->degr = 90; sce->toolsettings->step = 9; sce->toolsettings->turn = 1; sce->toolsettings->extr_offs = 1; sce->toolsettings->doublimit = 0.001f; sce->toolsettings->segments = 32; sce->toolsettings->rings = 32; sce->toolsettings->vertices = 32; } sce= sce->id.next; } for (lt=main->latt.first; lt; lt=lt->id.next) { if (lt->fu==0.0f && lt->fv==0.0f && lt->fw==0.0f) { calc_lat_fudu(lt->flag, lt->pntsu, <->fu, <->du); calc_lat_fudu(lt->flag, lt->pntsv, <->fv, <->dv); calc_lat_fudu(lt->flag, lt->pntsw, <->fw, <->dw); } } for (ob=main->object.first; ob; ob= ob->id.next) { ModifierData *md; PartEff *paf; for (md=ob->modifiers.first; md; md=md->next) { if (md->type==eModifierType_Subsurf) { SubsurfModifierData *smd = (SubsurfModifierData*) md; smd->flags &= ~(eSubsurfModifierFlag_Incremental|eSubsurfModifierFlag_DebugIncr); } } if ((ob->softflag&OB_SB_ENABLE) && !modifiers_findByType(ob, eModifierType_Softbody)) { if (ob->softflag&OB_SB_POSTDEF) { md = ob->modifiers.first; while (md && modifierType_getInfo(md->type)->type==eModifierTypeType_OnlyDeform) { md = md->next; } BLI_insertlinkbefore(&ob->modifiers, md, modifier_new(eModifierType_Softbody)); } else { BLI_addhead(&ob->modifiers, modifier_new(eModifierType_Softbody)); } ob->softflag &= ~OB_SB_ENABLE; } if (ob->pose) { bPoseChannel *pchan; bConstraint *con; for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) { // note, pchan->bone is also lib-link stuff if (pchan->limitmin[0] == 0.0f && pchan->limitmax[0] == 0.0f) { pchan->limitmin[0]= pchan->limitmin[1]= pchan->limitmin[2]= -180.0f; pchan->limitmax[0]= pchan->limitmax[1]= pchan->limitmax[2]= 180.0f; for (con= pchan->constraints.first; con; con= con->next) { if (con->type == CONSTRAINT_TYPE_KINEMATIC) { bKinematicConstraint *data = (bKinematicConstraint*)con->data; data->weight = 1.0f; data->orientweight = 1.0f; data->flag &= ~CONSTRAINT_IK_ROT; /* enforce conversion from old IK_TOPARENT to rootbone index */ data->rootbone= -1; /* update_pose_etc handles rootbone==-1 */ ob->pose->flag |= POSE_RECALC; } } } } } paf = blo_do_version_give_parteff_245(ob); if (paf) { if (paf->disp == 0) paf->disp = 100; if (paf->speedtex == 0) paf->speedtex = 8; if (paf->omat == 0) paf->omat = 1; } } for (arm=main->armature.first; arm; arm= arm->id.next) { bone_version_238(&arm->bonebase); arm->deformflag |= ARM_DEF_VGROUP; } for (me=main->mesh.first; me; me= me->id.next) { if (!me->medge) { make_edges(me, 1); /* 1 = use mface->edcode */ } else { mesh_strip_loose_faces(me); } } for (key= main->key.first; key; key= key->id.next) { KeyBlock *kb; int index = 1; for (kb= key->block.first; kb; kb= kb->next) { if (kb==key->refkey) { if (kb->name[0]==0) strcpy(kb->name, "Basis"); } else { if (kb->name[0]==0) { BLI_snprintf(kb->name, sizeof(kb->name), "Key %d", index); } index++; } } } } if (main->versionfile <= 239) { bArmature *arm; Object *ob; Scene *sce= main->scene.first; Camera *cam= main->camera.first; Material *ma= main->mat.first; int set_passepartout= 0; /* deformflag is local in modifier now */ for (ob=main->object.first; ob; ob= ob->id.next) { ModifierData *md; for (md=ob->modifiers.first; md; md=md->next) { if (md->type==eModifierType_Armature) { ArmatureModifierData *amd = (ArmatureModifierData*) md; if (amd->object && amd->deformflag==0) { Object *oba= blo_do_versions_newlibadr(fd, lib, amd->object); arm= blo_do_versions_newlibadr(fd, lib, oba->data); amd->deformflag= arm->deformflag; } } } } /* updating stepsize for ghost drawing */ for (arm= main->armature.first; arm; arm= arm->id.next) { if (arm->ghostsize==0) arm->ghostsize=1; bone_version_239(&arm->bonebase); if (arm->layer==0) arm->layer= 1; } for (;sce;sce= sce->id.next) { /* make 'innervert' the default subdivide type, for backwards compat */ sce->toolsettings->cornertype=1; if (sce->r.scemode & R_PASSEPARTOUT) { set_passepartout= 1; sce->r.scemode &= ~R_PASSEPARTOUT; } /* gauss is filter variable now */ if (sce->r.mode & R_GAUSS) { sce->r.filtertype= R_FILTER_GAUSS; sce->r.mode &= ~R_GAUSS; } } for (;cam; cam= cam->id.next) { if (set_passepartout) cam->flag |= CAM_SHOWPASSEPARTOUT; /* make sure old cameras have title safe on */ if (!(cam->flag & CAM_SHOWTITLESAFE)) cam->flag |= CAM_SHOWTITLESAFE; /* set an appropriate camera passepartout alpha */ if (!(cam->passepartalpha)) cam->passepartalpha = 0.2f; } for (; ma; ma= ma->id.next) { if (ma->strand_sta==0.0f) { ma->strand_sta= ma->strand_end= 1.0f; ma->mode |= MA_TANGENT_STR; } if (ma->mode & MA_TRACEBLE) ma->mode |= MA_SHADBUF; } } if (main->versionfile <= 241) { Object *ob; Tex *tex; Scene *sce; World *wo; Lamp *la; Material *ma; bArmature *arm; bNodeTree *ntree; for (wo = main->world.first; wo; wo= wo->id.next) { /* Migrate to Bullet for games, except for the NaN versions */ /* People can still explicitly choose for Sumo (after 2.42 is out) */ if (main->versionfile > 225) wo->physicsEngine = WOPHY_BULLET; if (WO_AODIST == wo->aomode) wo->aocolor= WO_AOPLAIN; } /* updating layers still */ for (arm= main->armature.first; arm; arm= arm->id.next) { bone_version_239(&arm->bonebase); if (arm->layer==0) arm->layer= 1; } for (sce= main->scene.first; sce; sce= sce->id.next) { if (sce->audio.mixrate==0) sce->audio.mixrate= 44100; if (sce->r.xparts<2) sce->r.xparts= 4; if (sce->r.yparts<2) sce->r.yparts= 4; /* adds default layer */ if (sce->r.layers.first==NULL) BKE_scene_add_render_layer(sce, NULL); else { SceneRenderLayer *srl; /* new layer flag for sky, was default for solid */ for (srl= sce->r.layers.first; srl; srl= srl->next) { if (srl->layflag & SCE_LAY_SOLID) srl->layflag |= SCE_LAY_SKY; srl->passflag &= (SCE_PASS_COMBINED|SCE_PASS_Z|SCE_PASS_NORMAL|SCE_PASS_VECTOR); } } /* node version changes */ if (sce->nodetree) ntree_version_241(sce->nodetree); /* uv calculation options moved to toolsettings */ if (sce->toolsettings->uvcalc_radius == 0.0f) { sce->toolsettings->uvcalc_radius = 1.0f; sce->toolsettings->uvcalc_cubesize = 1.0f; sce->toolsettings->uvcalc_mapdir = 1; sce->toolsettings->uvcalc_mapalign = 1; sce->toolsettings->uvcalc_flag = UVCALC_FILLHOLES; sce->toolsettings->unwrapper = 1; } if (sce->r.mode & R_PANORAMA) { /* all these checks to ensure saved files with svn version keep working... */ if (sce->r.xsch < sce->r.ysch) { Object *obc= blo_do_versions_newlibadr(fd, lib, sce->camera); if (obc && obc->type==OB_CAMERA) { Camera *cam= blo_do_versions_newlibadr(fd, lib, obc->data); if (cam->lens>=10.0f) { sce->r.xsch*= sce->r.xparts; cam->lens*= (float)sce->r.ysch/(float)sce->r.xsch; } } } } } for (ntree= main->nodetree.first; ntree; ntree= ntree->id.next) ntree_version_241(ntree); for (la= main->lamp.first; la; la= la->id.next) if (la->buffers==0) la->buffers= 1; for (tex= main->tex.first; tex; tex= tex->id.next) { if (tex->env && tex->env->viewscale==0.0f) tex->env->viewscale= 1.0f; // tex->imaflag |= TEX_GAUSS_MIP; } /* for empty drawsize and drawtype */ for (ob=main->object.first; ob; ob= ob->id.next) { if (ob->empty_drawsize==0.0f) { ob->empty_drawtype = OB_ARROWS; ob->empty_drawsize = 1.0; } } for (ma= main->mat.first; ma; ma= ma->id.next) { /* stucci returns intensity from now on */ int a; for (a=0; amtex[a] && ma->mtex[a]->tex) { tex= blo_do_versions_newlibadr(fd, lib, ma->mtex[a]->tex); if (tex && tex->type==TEX_STUCCI) ma->mtex[a]->mapto &= ~(MAP_COL|MAP_SPEC|MAP_REF); } } /* transmissivity defaults */ if (ma->tx_falloff==0.0f) ma->tx_falloff= 1.0f; } /* during 2.41 images with this name were used for viewer node output, lets fix that */ if (main->versionfile == 241) { Image *ima; for (ima= main->image.first; ima; ima= ima->id.next) if (strcmp(ima->name, "Compositor")==0) { strcpy(ima->id.name+2, "Viewer Node"); strcpy(ima->name, "Viewer Node"); } } } if (main->versionfile <= 242) { Scene *sce; bScreen *sc; Object *ob; Curve *cu; Material *ma; Mesh *me; Group *group; Nurb *nu; BezTriple *bezt; BPoint *bp; bNodeTree *ntree; int a; for (sc= main->screen.first; sc; sc= sc->id.next) { ScrArea *sa; sa= sc->areabase.first; while (sa) { SpaceLink *sl; for (sl= sa->spacedata.first; sl; sl= sl->next) { if (sl->spacetype==SPACE_VIEW3D) { View3D *v3d= (View3D*) sl; if (v3d->gridsubdiv == 0) v3d->gridsubdiv = 10; } } sa = sa->next; } } for (sce= main->scene.first; sce; sce= sce->id.next) { if (sce->toolsettings->select_thresh == 0.0f) sce->toolsettings->select_thresh= 0.01f; if (sce->toolsettings->clean_thresh == 0.0f) sce->toolsettings->clean_thresh = 0.1f; if (sce->r.threads==0) { if (sce->r.mode & R_THREADS) sce->r.threads= 2; else sce->r.threads= 1; } if (sce->nodetree) ntree_version_242(sce->nodetree); } for (ntree= main->nodetree.first; ntree; ntree= ntree->id.next) ntree_version_242(ntree); /* add default radius values to old curve points */ for (cu= main->curve.first; cu; cu= cu->id.next) { for (nu= cu->nurb.first; nu; nu= nu->next) { if (nu) { if (nu->bezt) { for (bezt=nu->bezt, a=0; apntsu; a++, bezt++) { if (!bezt->radius) bezt->radius= 1.0; } } else if (nu->bp) { for (bp=nu->bp, a=0; apntsu*nu->pntsv; a++, bp++) { if (!bp->radius) bp->radius= 1.0; } } } } } for (ob = main->object.first; ob; ob= ob->id.next) { ModifierData *md; ListBase *list; list = &ob->constraints; /* check for already existing MinMax (floor) constraint * and update the sticky flagging */ if (list) { bConstraint *curcon; for (curcon = list->first; curcon; curcon=curcon->next) { switch (curcon->type) { case CONSTRAINT_TYPE_MINMAX: { bMinMaxConstraint *data = curcon->data; if (data->sticky==1) data->flag |= MINMAX_STICKY; else data->flag &= ~MINMAX_STICKY; } break; case CONSTRAINT_TYPE_ROTLIKE: { bRotateLikeConstraint *data = curcon->data; /* version patch from buttons_object.c */ if (data->flag==0) data->flag = ROTLIKE_X|ROTLIKE_Y|ROTLIKE_Z; } break; } } } if (ob->type == OB_ARMATURE) { if (ob->pose) { bConstraint *curcon; bPoseChannel *pchan; for (pchan = ob->pose->chanbase.first; pchan; pchan=pchan->next) { for (curcon = pchan->constraints.first; curcon; curcon=curcon->next) { switch (curcon->type) { case CONSTRAINT_TYPE_MINMAX: { bMinMaxConstraint *data = curcon->data; if (data->sticky==1) data->flag |= MINMAX_STICKY; else data->flag &= ~MINMAX_STICKY; } break; case CONSTRAINT_TYPE_KINEMATIC: { bKinematicConstraint *data = curcon->data; if (!(data->flag & CONSTRAINT_IK_POS)) { data->flag |= CONSTRAINT_IK_POS; data->flag |= CONSTRAINT_IK_STRETCH; } } break; case CONSTRAINT_TYPE_ROTLIKE: { bRotateLikeConstraint *data = curcon->data; /* version patch from buttons_object.c */ if (data->flag==0) data->flag = ROTLIKE_X|ROTLIKE_Y|ROTLIKE_Z; } break; } } } } } /* copy old object level track settings to curve modifers */ for (md=ob->modifiers.first; md; md=md->next) { if (md->type==eModifierType_Curve) { CurveModifierData *cmd = (CurveModifierData*) md; if (cmd->defaxis == 0) cmd->defaxis = ob->trackflag+1; } } } for (ma = main->mat.first; ma; ma= ma->id.next) { if (ma->shad_alpha==0.0f) ma->shad_alpha= 1.0f; if (ma->nodetree) ntree_version_242(ma->nodetree); } for (me=main->mesh.first; me; me=me->id.next) customdata_version_242(me); for (group= main->group.first; group; group= group->id.next) if (group->layer==0) group->layer= (1<<20)-1; /* now, subversion control! */ if (main->subversionfile < 3) { Image *ima; Tex *tex; /* Image refactor initialize */ for (ima= main->image.first; ima; ima= ima->id.next) { ima->source= IMA_SRC_FILE; ima->type= IMA_TYPE_IMAGE; ima->gen_x= 256; ima->gen_y= 256; ima->gen_type= 1; if (0==strncmp(ima->id.name+2, "Viewer Node", sizeof(ima->id.name)-2)) { ima->source= IMA_SRC_VIEWER; ima->type= IMA_TYPE_COMPOSITE; } if (0==strncmp(ima->id.name+2, "Render Result", sizeof(ima->id.name)-2)) { ima->source= IMA_SRC_VIEWER; ima->type= IMA_TYPE_R_RESULT; } } for (tex= main->tex.first; tex; tex= tex->id.next) { if (tex->type==TEX_IMAGE && tex->ima) { ima= blo_do_versions_newlibadr(fd, lib, tex->ima); if (tex->imaflag & TEX_ANIM5_) ima->source= IMA_SRC_MOVIE; if (tex->imaflag & TEX_FIELDS_) ima->flag |= IMA_FIELDS; if (tex->imaflag & TEX_STD_FIELD_) ima->flag |= IMA_STD_FIELD; } tex->iuser.frames= tex->frames; tex->iuser.fie_ima= (char)tex->fie_ima; tex->iuser.offset= tex->offset; tex->iuser.sfra= tex->sfra; tex->iuser.cycl= (tex->imaflag & TEX_ANIMCYCLIC_)!=0; } for (sce= main->scene.first; sce; sce= sce->id.next) { if (sce->nodetree) do_version_ntree_242_2(sce->nodetree); } for (ntree= main->nodetree.first; ntree; ntree= ntree->id.next) do_version_ntree_242_2(ntree); for (ma = main->mat.first; ma; ma= ma->id.next) if (ma->nodetree) do_version_ntree_242_2(ma->nodetree); for (sc= main->screen.first; sc; sc= sc->id.next) { ScrArea *sa; for (sa= sc->areabase.first; sa; sa= sa->next) { SpaceLink *sl; for (sl= sa->spacedata.first; sl; sl= sl->next) { if (sl->spacetype==SPACE_IMAGE) ((SpaceImage *)sl)->iuser.fie_ima= 2; else if (sl->spacetype==SPACE_VIEW3D) { View3D *v3d= (View3D *)sl; BGpic *bgpic; for (bgpic= v3d->bgpicbase.first; bgpic; bgpic= bgpic->next) bgpic->iuser.fie_ima= 2; } } } } } if (main->subversionfile < 4) { for (sce= main->scene.first; sce; sce= sce->id.next) { sce->r.bake_mode= 1; /* prevent to include render stuff here */ sce->r.bake_filter= 2; sce->r.bake_osa= 5; sce->r.bake_flag= R_BAKE_CLEAR; } } if (main->subversionfile < 5) { for (sce= main->scene.first; sce; sce= sce->id.next) { /* improved triangle to quad conversion settings */ if (sce->toolsettings->jointrilimit==0.0f) sce->toolsettings->jointrilimit= 0.8f; } } } if (main->versionfile <= 243) { Object *ob= main->object.first; Material *ma; for (ma=main->mat.first; ma; ma= ma->id.next) { if (ma->sss_scale==0.0f) { ma->sss_radius[0]= 1.0f; ma->sss_radius[1]= 1.0f; ma->sss_radius[2]= 1.0f; ma->sss_col[0]= 0.8f; ma->sss_col[1]= 0.8f; ma->sss_col[2]= 0.8f; ma->sss_error= 0.05f; ma->sss_scale= 0.1f; ma->sss_ior= 1.3f; ma->sss_colfac= 1.0f; ma->sss_texfac= 0.0f; } if (ma->sss_front==0 && ma->sss_back==0) { ma->sss_front= 1.0f; ma->sss_back= 1.0f; } if (ma->sss_col[0]==0 && ma->sss_col[1]==0 && ma->sss_col[2]==0) { ma->sss_col[0]= ma->r; ma->sss_col[1]= ma->g; ma->sss_col[2]= ma->b; } } for (; ob; ob= ob->id.next) { bDeformGroup *curdef; for (curdef= ob->defbase.first; curdef; curdef=curdef->next) { /* replace an empty-string name with unique name */ if (curdef->name[0] == '\0') { defgroup_unique_name(curdef, ob); } } if (main->versionfile < 243 || main->subversionfile < 1) { ModifierData *md; /* translate old mirror modifier axis values to new flags */ for (md=ob->modifiers.first; md; md=md->next) { if (md->type==eModifierType_Mirror) { MirrorModifierData *mmd = (MirrorModifierData*) md; switch (mmd->axis) { case 0: mmd->flag |= MOD_MIR_AXIS_X; break; case 1: mmd->flag |= MOD_MIR_AXIS_Y; break; case 2: mmd->flag |= MOD_MIR_AXIS_Z; break; } mmd->axis = 0; } } } } /* render layer added, this is not the active layer */ if (main->versionfile <= 243 || main->subversionfile < 2) { Mesh *me; for (me=main->mesh.first; me; me=me->id.next) customdata_version_243(me); } } if (main->versionfile <= 244) { Scene *sce; bScreen *sc; Lamp *la; World *wrld; if (main->versionfile != 244 || main->subversionfile < 2) { for (sce= main->scene.first; sce; sce= sce->id.next) sce->r.mode |= R_SSS; /* correct older action editors - incorrect scrolling */ for (sc= main->screen.first; sc; sc= sc->id.next) { ScrArea *sa; sa= sc->areabase.first; while (sa) { SpaceLink *sl; for (sl= sa->spacedata.first; sl; sl= sl->next) { if (sl->spacetype==SPACE_ACTION) { SpaceAction *saction= (SpaceAction*) sl; saction->v2d.tot.ymin = -1000.0; saction->v2d.tot.ymax = 0.0; saction->v2d.cur.ymin = -75.0; saction->v2d.cur.ymax = 5.0; } } sa = sa->next; } } } if (main->versionfile != 244 || main->subversionfile < 3) { /* constraints recode version patch used to be here. Moved to 245 now... */ for (wrld=main->world.first; wrld; wrld= wrld->id.next) { if (wrld->mode & WO_AMB_OCC) wrld->ao_samp_method = WO_AOSAMP_CONSTANT; else wrld->ao_samp_method = WO_AOSAMP_HAMMERSLEY; wrld->ao_adapt_thresh = 0.005f; } for (la=main->lamp.first; la; la= la->id.next) { if (la->type == LA_AREA) la->ray_samp_method = LA_SAMP_CONSTANT; else la->ray_samp_method = LA_SAMP_HALTON; la->adapt_thresh = 0.001f; } } } if (main->versionfile <= 245) { Scene *sce; Object *ob; Image *ima; Lamp *la; Material *ma; ParticleSettings *part; World *wrld; Mesh *me; bNodeTree *ntree; Tex *tex; ModifierData *md; ParticleSystem *psys; /* unless the file was created 2.44.3 but not 2.45, update the constraints */ if ( !(main->versionfile==244 && main->subversionfile==3) && ((main->versionfile<245) || (main->versionfile==245 && main->subversionfile==0)) ) { for (ob = main->object.first; ob; ob= ob->id.next) { ListBase *list; list = &ob->constraints; /* fix up constraints due to constraint recode changes (originally at 2.44.3) */ if (list) { bConstraint *curcon; for (curcon = list->first; curcon; curcon=curcon->next) { /* old CONSTRAINT_LOCAL check -> convert to CONSTRAINT_SPACE_LOCAL */ if (curcon->flag & 0x20) { curcon->ownspace = CONSTRAINT_SPACE_LOCAL; curcon->tarspace = CONSTRAINT_SPACE_LOCAL; } switch (curcon->type) { case CONSTRAINT_TYPE_LOCLIMIT: { bLocLimitConstraint *data= (bLocLimitConstraint *)curcon->data; /* old limit without parent option for objects */ if (data->flag2) curcon->ownspace = CONSTRAINT_SPACE_LOCAL; } break; } } } /* correctly initialize constinv matrix */ unit_m4(ob->constinv); if (ob->type == OB_ARMATURE) { if (ob->pose) { bConstraint *curcon; bPoseChannel *pchan; for (pchan = ob->pose->chanbase.first; pchan; pchan=pchan->next) { /* make sure constraints are all up to date */ for (curcon = pchan->constraints.first; curcon; curcon=curcon->next) { /* old CONSTRAINT_LOCAL check -> convert to CONSTRAINT_SPACE_LOCAL */ if (curcon->flag & 0x20) { curcon->ownspace = CONSTRAINT_SPACE_LOCAL; curcon->tarspace = CONSTRAINT_SPACE_LOCAL; } switch (curcon->type) { case CONSTRAINT_TYPE_ACTION: { bActionConstraint *data= (bActionConstraint *)curcon->data; /* 'data->local' used to mean that target was in local-space */ if (data->local) curcon->tarspace = CONSTRAINT_SPACE_LOCAL; } break; } } /* correctly initialize constinv matrix */ unit_m4(pchan->constinv); } } } } } /* fix all versions before 2.45 */ if (main->versionfile != 245) { /* repair preview from 242 - 244*/ for (ima= main->image.first; ima; ima= ima->id.next) { ima->preview = NULL; } } /* 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->ptcaches); for (psys=ob->particlesystem.first; psys; psys=psys->next) { if (psys->pointcache) { if (psys->pointcache->flag & PTCACHE_BAKED && (psys->pointcache->flag & PTCACHE_DISK_CACHE)==0) { printf("Old memory cache isn't supported for particles, so re-bake the simulation!\n"); psys->pointcache->flag &= ~PTCACHE_BAKED; } } else 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->ptcaches); } } } /* Copy over old per-level multires vertex data * into a single vertex array in struct Multires */ for (me = main->mesh.first; me; me=me->id.next) { if (me->mr && !me->mr->verts) { MultiresLevel *lvl = me->mr->levels.last; if (lvl) { me->mr->verts = lvl->verts; lvl->verts = NULL; /* Don't need the other vert arrays */ for (lvl = lvl->prev; lvl; lvl = lvl->prev) { MEM_freeN(lvl->verts); lvl->verts = NULL; } } } } if (main->versionfile != 245 || main->subversionfile < 1) { for (la=main->lamp.first; la; la= la->id.next) { if (la->mode & LA_QUAD) la->falloff_type = LA_FALLOFF_SLIDERS; else la->falloff_type = LA_FALLOFF_INVLINEAR; if (la->curfalloff == NULL) { la->curfalloff = curvemapping_add(1, 0.0f, 1.0f, 1.0f, 0.0f); curvemapping_initialize(la->curfalloff); } } } for (ma=main->mat.first; ma; ma= ma->id.next) { if (ma->samp_gloss_mir == 0) { ma->gloss_mir = ma->gloss_tra= 1.0f; ma->aniso_gloss_mir = 1.0f; ma->samp_gloss_mir = ma->samp_gloss_tra= 18; ma->adapt_thresh_mir = ma->adapt_thresh_tra = 0.005f; ma->dist_mir = 0.0f; ma->fadeto_mir = MA_RAYMIR_FADETOSKY; } if (ma->strand_min == 0.0f) ma->strand_min= 1.0f; } for (part=main->particle.first; part; part=part->id.next) { if (part->ren_child_nbr==0) part->ren_child_nbr= part->child_nbr; if (part->simplify_refsize==0) { part->simplify_refsize= 1920; part->simplify_rate= 1.0f; part->simplify_transition= 0.1f; part->simplify_viewport= 0.8f; } } for (wrld=main->world.first; wrld; wrld= wrld->id.next) { if (wrld->ao_approx_error == 0.0f) wrld->ao_approx_error= 0.25f; } for (sce= main->scene.first; sce; sce= sce->id.next) { if (sce->nodetree) ntree_version_245(fd, lib, sce->nodetree); if (sce->r.simplify_shadowsamples == 0) { sce->r.simplify_subsurf= 6; sce->r.simplify_particles= 1.0f; sce->r.simplify_shadowsamples= 16; sce->r.simplify_aosss= 1.0f; } if (sce->r.cineongamma == 0) { sce->r.cineonblack= 95; sce->r.cineonwhite= 685; sce->r.cineongamma= 1.7f; } } for (ntree=main->nodetree.first; ntree; ntree= ntree->id.next) ntree_version_245(fd, lib, ntree); /* fix for temporary flag changes during 245 cycle */ for (ima= main->image.first; ima; ima= ima->id.next) { if (ima->flag & IMA_OLD_PREMUL) { ima->flag &= ~IMA_OLD_PREMUL; ima->flag |= IMA_DO_PREMUL; } } for (tex=main->tex.first; tex; tex=tex->id.next) { if (tex->iuser.flag & IMA_OLD_PREMUL) { tex->iuser.flag &= ~IMA_OLD_PREMUL; tex->iuser.flag |= IMA_DO_PREMUL; } ima= blo_do_versions_newlibadr(fd, lib, tex->ima); if (ima && (tex->iuser.flag & IMA_DO_PREMUL)) { ima->flag &= ~IMA_OLD_PREMUL; ima->flag |= IMA_DO_PREMUL; } } } /* sanity check for skgen * */ { Scene *sce; for (sce=main->scene.first; sce; sce = sce->id.next) { if (sce->toolsettings->skgen_subdivisions[0] == sce->toolsettings->skgen_subdivisions[1] || sce->toolsettings->skgen_subdivisions[0] == sce->toolsettings->skgen_subdivisions[2] || sce->toolsettings->skgen_subdivisions[1] == sce->toolsettings->skgen_subdivisions[2]) { sce->toolsettings->skgen_subdivisions[0] = SKGEN_SUB_CORRELATION; sce->toolsettings->skgen_subdivisions[1] = SKGEN_SUB_LENGTH; sce->toolsettings->skgen_subdivisions[2] = SKGEN_SUB_ANGLE; } } } if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 2)) { Image *ima; /* initialize 1:1 Aspect */ for (ima= main->image.first; ima; ima= ima->id.next) { ima->aspx = ima->aspy = 1.0f; } } if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 4)) { bArmature *arm; ModifierData *md; Object *ob; for (arm= main->armature.first; arm; arm= arm->id.next) arm->deformflag |= ARM_DEF_B_BONE_REST; for (ob = main->object.first; ob; ob= ob->id.next) { for (md=ob->modifiers.first; md; md=md->next) { if (md->type==eModifierType_Armature) ((ArmatureModifierData*)md)->deformflag |= ARM_DEF_B_BONE_REST; } } } if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 5)) { /* foreground color needs to be something other then black */ Scene *sce; for (sce= main->scene.first; sce; sce=sce->id.next) { sce->r.fg_stamp[0] = sce->r.fg_stamp[1] = sce->r.fg_stamp[2] = 0.8f; sce->r.fg_stamp[3] = 1.0f; /* don't use text alpha yet */ sce->r.bg_stamp[3] = 0.25f; /* make sure the background has full alpha */ } } if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 6)) { Scene *sce; /* fix frs_sec_base */ for (sce= main->scene.first; sce; sce= sce->id.next) { if (sce->r.frs_sec_base == 0) { sce->r.frs_sec_base = 1; } } } if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 7)) { Object *ob; bPoseChannel *pchan; bConstraint *con; bConstraintTarget *ct; for (ob = main->object.first; ob; ob= ob->id.next) { if (ob->pose) { for (pchan=ob->pose->chanbase.first; pchan; pchan=pchan->next) { for (con=pchan->constraints.first; con; con=con->next) { if (con->type == CONSTRAINT_TYPE_PYTHON) { bPythonConstraint *data= (bPythonConstraint *)con->data; if (data->tar) { /* version patching needs to be done */ ct= MEM_callocN(sizeof(bConstraintTarget), "PyConTarget"); ct->tar = data->tar; BLI_strncpy(ct->subtarget, data->subtarget, sizeof(ct->subtarget)); ct->space = con->tarspace; BLI_addtail(&data->targets, ct); data->tarnum++; /* clear old targets to avoid problems */ data->tar = NULL; data->subtarget[0]= '\0'; } } else if (con->type == CONSTRAINT_TYPE_LOCLIKE) { bLocateLikeConstraint *data= (bLocateLikeConstraint *)con->data; /* new headtail functionality makes Bone-Tip function obsolete */ if (data->flag & LOCLIKE_TIP) con->headtail = 1.0f; } } } } for (con=ob->constraints.first; con; con=con->next) { if (con->type==CONSTRAINT_TYPE_PYTHON) { bPythonConstraint *data= (bPythonConstraint *)con->data; if (data->tar) { /* version patching needs to be done */ ct= MEM_callocN(sizeof(bConstraintTarget), "PyConTarget"); ct->tar = data->tar; BLI_strncpy(ct->subtarget, data->subtarget, sizeof(ct->subtarget)); ct->space = con->tarspace; BLI_addtail(&data->targets, ct); data->tarnum++; /* clear old targets to avoid problems */ data->tar = NULL; data->subtarget[0]= '\0'; } } else if (con->type == CONSTRAINT_TYPE_LOCLIKE) { bLocateLikeConstraint *data= (bLocateLikeConstraint *)con->data; /* new headtail functionality makes Bone-Tip function obsolete */ if (data->flag & LOCLIKE_TIP) con->headtail = 1.0f; } } if (ob->soft && ob->soft->keys) { SoftBody *sb = ob->soft; int k; for (k=0; ktotkey; k++) { if (sb->keys[k]) MEM_freeN(sb->keys[k]); } MEM_freeN(sb->keys); sb->keys = NULL; sb->totkey = 0; } } } if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 8)) { Scene *sce; Object *ob; PartEff *paf=NULL; for (ob = main->object.first; ob; ob= ob->id.next) { if (ob->soft && ob->soft->keys) { SoftBody *sb = ob->soft; int k; for (k=0; ktotkey; k++) { if (sb->keys[k]) MEM_freeN(sb->keys[k]); } MEM_freeN(sb->keys); sb->keys = NULL; sb->totkey = 0; } /* convert old particles to new system */ if ((paf = blo_do_version_give_parteff_245(ob))) { ParticleSystem *psys; ModifierData *md; ParticleSystemModifierData *psmd; ParticleSettings *part; /* create new particle system */ psys = MEM_callocN(sizeof(ParticleSystem), "particle_system"); psys->pointcache = BKE_ptcache_add(&psys->ptcaches); part = psys->part = psys_new_settings("ParticleSettings", main); /* needed for proper libdata lookup */ blo_do_versions_oldnewmap_insert(fd->libmap, psys->part, psys->part, 0); part->id.lib= ob->id.lib; part->id.us--; part->id.flag |= (ob->id.flag & LIB_NEEDLINK); psys->totpart=0; psys->flag= PSYS_ENABLED|PSYS_CURRENT; BLI_addtail(&ob->particlesystem, psys); md= modifier_new(eModifierType_ParticleSystem); BLI_snprintf(md->name, sizeof(md->name), "ParticleSystem %i", BLI_countlist(&ob->particlesystem)); psmd= (ParticleSystemModifierData*) md; psmd->psys=psys; BLI_addtail(&ob->modifiers, md); /* convert settings from old particle system */ /* general settings */ part->totpart = MIN2(paf->totpart, 100000); part->sta = paf->sta; part->end = paf->end; part->lifetime = paf->lifetime; part->randlife = paf->randlife; psys->seed = paf->seed; part->disp = paf->disp; part->omat = paf->mat[0]; part->hair_step = paf->totkey; part->eff_group = paf->group; /* old system didn't interpolate between keypoints at render time */ part->draw_step = part->ren_step = 0; /* physics */ part->normfac = paf->normfac * 25.0f; part->obfac = paf->obfac; part->randfac = paf->randfac * 25.0f; part->dampfac = paf->damp; copy_v3_v3(part->acc, paf->force); /* flags */ if (paf->stype & PAF_VECT) { if (paf->flag & PAF_STATIC) { /* new hair lifetime is always 100.0f */ float fac = paf->lifetime / 100.0f; part->draw_as = PART_DRAW_PATH; part->type = PART_HAIR; psys->recalc |= PSYS_RECALC_REDO; part->normfac *= fac; part->randfac *= fac; } else { part->draw_as = PART_DRAW_LINE; part->draw |= PART_DRAW_VEL_LENGTH; part->draw_line[1] = 0.04f; } } part->rotmode = PART_ROT_VEL; part->flag |= (paf->flag & PAF_BSPLINE) ? PART_HAIR_BSPLINE : 0; part->flag |= (paf->flag & PAF_TRAND) ? PART_TRAND : 0; part->flag |= (paf->flag & PAF_EDISTR) ? PART_EDISTR : 0; part->flag |= (paf->flag & PAF_UNBORN) ? PART_UNBORN : 0; part->flag |= (paf->flag & PAF_DIED) ? PART_DIED : 0; part->from |= (paf->flag & PAF_FACE) ? PART_FROM_FACE : 0; part->draw |= (paf->flag & PAF_SHOWE) ? PART_DRAW_EMITTER : 0; psys->vgroup[PSYS_VG_DENSITY] = paf->vertgroup; psys->vgroup[PSYS_VG_VEL] = paf->vertgroup_v; psys->vgroup[PSYS_VG_LENGTH] = paf->vertgroup_v; /* dupliobjects */ if (ob->transflag & OB_DUPLIVERTS) { Object *dup = main->object.first; for (; dup; dup= dup->id.next) { if (ob == blo_do_versions_newlibadr(fd, lib, dup->parent)) { part->dup_ob = dup; ob->transflag |= OB_DUPLIPARTS; ob->transflag &= ~OB_DUPLIVERTS; part->draw_as = PART_DRAW_OB; /* needed for proper libdata lookup */ blo_do_versions_oldnewmap_insert(fd->libmap, dup, dup, 0); } } } { FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(ob, eModifierType_Fluidsim); if (fluidmd && fluidmd->fss && fluidmd->fss->type == OB_FLUIDSIM_PARTICLE) part->type = PART_FLUID; } do_version_free_effects_245(&ob->effect); printf("Old particle system converted to new system.\n"); } } for (sce= main->scene.first; sce; sce=sce->id.next) { ParticleEditSettings *pset= &sce->toolsettings->particle; int a; if (pset->brush[0].size == 0) { pset->flag= PE_KEEP_LENGTHS|PE_LOCK_FIRST|PE_DEFLECT_EMITTER; pset->emitterdist= 0.25f; pset->totrekey= 5; pset->totaddkey= 5; pset->brushtype= PE_BRUSH_NONE; for (a=0; abrush[a].strength= 50; pset->brush[a].size= 50; pset->brush[a].step= 10; } pset->brush[PE_BRUSH_CUT].strength= 100; } } } if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 9)) { Material *ma; int a; for (ma=main->mat.first; ma; ma= ma->id.next) if (ma->mode & MA_NORMAP_TANG) for (a=0; amtex[a] && ma->mtex[a]->tex) ma->mtex[a]->normapspace = MTEX_NSPACE_TANGENT; } if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 10)) { Object *ob; /* dupliface scale */ for (ob= main->object.first; ob; ob= ob->id.next) ob->dupfacesca = 1.0f; } if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 11)) { Object *ob; bActionStrip *strip; /* nla-strips - scale */ for (ob= main->object.first; ob; ob= ob->id.next) { for (strip= ob->nlastrips.first; strip; strip= strip->next) { float length, actlength, repeat; if (strip->flag & ACTSTRIP_USESTRIDE) repeat= 1.0f; else repeat= strip->repeat; length = strip->end-strip->start; if (length == 0.0f) length= 1.0f; actlength = strip->actend-strip->actstart; strip->scale = length / (repeat * actlength); if (strip->scale == 0.0f) strip->scale= 1.0f; } if (ob->soft) { ob->soft->inpush = ob->soft->inspring; ob->soft->shearstiff = 1.0f; } } } if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 14)) { Scene *sce; Sequence *seq; for (sce=main->scene.first; sce; sce=sce->id.next) { SEQ_BEGIN (sce->ed, seq) { if (seq->blend_mode == 0) seq->blend_opacity = 100.0f; } SEQ_END } } /*fix broken group lengths in id properties*/ if ((main->versionfile < 245) || (main->versionfile == 245 && main->subversionfile < 15)) { idproperties_fix_group_lengths(main->scene); idproperties_fix_group_lengths(main->library); idproperties_fix_group_lengths(main->object); idproperties_fix_group_lengths(main->mesh); idproperties_fix_group_lengths(main->curve); idproperties_fix_group_lengths(main->mball); idproperties_fix_group_lengths(main->mat); idproperties_fix_group_lengths(main->tex); idproperties_fix_group_lengths(main->image); idproperties_fix_group_lengths(main->latt); idproperties_fix_group_lengths(main->lamp); idproperties_fix_group_lengths(main->camera); idproperties_fix_group_lengths(main->ipo); idproperties_fix_group_lengths(main->key); idproperties_fix_group_lengths(main->world); idproperties_fix_group_lengths(main->screen); idproperties_fix_group_lengths(main->script); idproperties_fix_group_lengths(main->vfont); idproperties_fix_group_lengths(main->text); idproperties_fix_group_lengths(main->sound); idproperties_fix_group_lengths(main->group); idproperties_fix_group_lengths(main->armature); idproperties_fix_group_lengths(main->action); idproperties_fix_group_lengths(main->nodetree); idproperties_fix_group_lengths(main->brush); idproperties_fix_group_lengths(main->particle); } /* sun/sky */ if (main->versionfile < 246) { Object *ob; bActuator *act; /* dRot actuator change direction in 2.46 */ for (ob = main->object.first; ob; ob= ob->id.next) { for (act= ob->actuators.first; act; act= act->next) { if (act->type == ACT_OBJECT) { bObjectActuator *ba= act->data; ba->drot[0] = -ba->drot[0]; ba->drot[1] = -ba->drot[1]; ba->drot[2] = -ba->drot[2]; } } } } // convert fluids to modifier if (main->versionfile < 246 || (main->versionfile == 246 && main->subversionfile < 1)) { Object *ob; for (ob = main->object.first; ob; ob= ob->id.next) { if (ob->fluidsimSettings) { FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifier_new(eModifierType_Fluidsim); BLI_addhead(&ob->modifiers, (ModifierData *)fluidmd); MEM_freeN(fluidmd->fss); fluidmd->fss = MEM_dupallocN(ob->fluidsimSettings); fluidmd->fss->ipo = blo_do_versions_newlibadr_us(fd, ob->id.lib, ob->fluidsimSettings->ipo); MEM_freeN(ob->fluidsimSettings); fluidmd->fss->lastgoodframe = INT_MAX; fluidmd->fss->flag = 0; fluidmd->fss->meshVelocities = NULL; } } } if (main->versionfile < 246 || (main->versionfile == 246 && main->subversionfile < 1)) { Mesh *me; for (me=main->mesh.first; me; me= me->id.next) alphasort_version_246(fd, lib, me); } if (main->versionfile < 246 || (main->versionfile == 246 && main->subversionfile < 1)) { Object *ob; for (ob = main->object.first; ob; ob= ob->id.next) { if (ob->pd && (ob->pd->forcefield == PFIELD_WIND)) ob->pd->f_noise = 0.0f; } } if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 2)) { Object *ob; for (ob = main->object.first; ob; ob= ob->id.next) { ob->gameflag |= OB_COLLISION; ob->margin = 0.06f; } } if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 3)) { Object *ob; for (ob = main->object.first; ob; ob= ob->id.next) { // Starting from subversion 3, ACTOR is a separate feature. // Before it was conditioning all the other dynamic flags if (!(ob->gameflag & OB_ACTOR)) ob->gameflag &= ~(OB_GHOST|OB_DYNAMIC|OB_RIGID_BODY|OB_SOFT_BODY|OB_COLLISION_RESPONSE); /* suitable default for older files */ } } if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 5)) { Lamp *la= main->lamp.first; for (; la; la= la->id.next) { la->skyblendtype= MA_RAMP_ADD; la->skyblendfac= 1.0f; } } /* set the curve radius interpolation to 2.47 default - easy */ if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 6)) { Curve *cu; Nurb *nu; for (cu= main->curve.first; cu; cu= cu->id.next) { for (nu= cu->nurb.first; nu; nu= nu->next) { if (nu) { nu->radius_interp = 3; /* resolu and resolv are now used differently for surfaces * rather than using the resolution to define the entire number of divisions, * use it for the number of divisions per segment */ if (nu->pntsv > 1) { nu->resolu = MAX2( 1, (int)(((float)nu->resolu / (float)nu->pntsu)+0.5f) ); nu->resolv = MAX2( 1, (int)(((float)nu->resolv / (float)nu->pntsv)+0.5f) ); } } } } } /* direction constraint actuators were always local in previous version */ if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 7)) { bActuator *act; Object *ob; for (ob = main->object.first; ob; ob= ob->id.next) { for (act= ob->actuators.first; act; act= act->next) { if (act->type == ACT_CONSTRAINT) { bConstraintActuator *coa = act->data; if (coa->type == ACT_CONST_TYPE_DIST) { coa->flag |= ACT_CONST_LOCAL; } } } } } if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 9)) { Lamp *la= main->lamp.first; for (; la; la= la->id.next) { la->sky_exposure= 1.0f; } } /* BGE message actuators needed OB prefix, very confusing */ if (main->versionfile < 247 || (main->versionfile == 247 && main->subversionfile < 10)) { bActuator *act; Object *ob; for (ob = main->object.first; ob; ob= ob->id.next) { for (act= ob->actuators.first; act; act= act->next) { if (act->type == ACT_MESSAGE) { bMessageActuator *msgAct = (bMessageActuator *) act->data; if (BLI_strnlen(msgAct->toPropName, 3) > 2) { /* strip first 2 chars, would have only worked if these were OB anyway */ memmove(msgAct->toPropName, msgAct->toPropName + 2, sizeof(msgAct->toPropName) - 2); } else { msgAct->toPropName[0] = '\0'; } } } } } if (main->versionfile < 248) { Lamp *la; for (la=main->lamp.first; la; la= la->id.next) { if (la->atm_turbidity == 0.0f) { la->sun_effect_type = 0; la->horizon_brightness = 1.0f; la->spread = 1.0f; la->sun_brightness = 1.0f; la->sun_size = 1.0f; la->backscattered_light = 1.0f; la->atm_turbidity = 2.0f; la->atm_inscattering_factor = 1.0f; la->atm_extinction_factor = 1.0f; la->atm_distance_factor = 1.0f; la->sun_intensity = 1.0f; } } } if (main->versionfile < 248 || (main->versionfile == 248 && main->subversionfile < 2)) { Scene *sce; /* Note, these will need to be added for painting */ for (sce= main->scene.first; sce; sce= sce->id.next) { sce->toolsettings->imapaint.seam_bleed = 2; sce->toolsettings->imapaint.normal_angle = 80; /* initialize skeleton generation toolsettings */ sce->toolsettings->skgen_resolution = 250; sce->toolsettings->skgen_threshold_internal = 0.1f; sce->toolsettings->skgen_threshold_external = 0.1f; sce->toolsettings->skgen_angle_limit = 30.0f; sce->toolsettings->skgen_length_ratio = 1.3f; sce->toolsettings->skgen_length_limit = 1.5f; sce->toolsettings->skgen_correlation_limit = 0.98f; sce->toolsettings->skgen_symmetry_limit = 0.1f; sce->toolsettings->skgen_postpro = SKGEN_SMOOTH; sce->toolsettings->skgen_postpro_passes = 3; sce->toolsettings->skgen_options = SKGEN_FILTER_INTERNAL|SKGEN_FILTER_EXTERNAL|SKGEN_FILTER_SMART|SKGEN_SUB_CORRELATION|SKGEN_HARMONIC; sce->toolsettings->skgen_subdivisions[0] = SKGEN_SUB_CORRELATION; sce->toolsettings->skgen_subdivisions[1] = SKGEN_SUB_LENGTH; sce->toolsettings->skgen_subdivisions[2] = SKGEN_SUB_ANGLE; sce->toolsettings->skgen_retarget_angle_weight = 1.0f; sce->toolsettings->skgen_retarget_length_weight = 1.0f; sce->toolsettings->skgen_retarget_distance_weight = 1.0f; /* Skeleton Sketching */ sce->toolsettings->bone_sketching = 0; sce->toolsettings->skgen_retarget_roll = SK_RETARGET_ROLL_VIEW; } } if (main->versionfile < 248 || (main->versionfile == 248 && main->subversionfile < 3)) { bScreen *sc; /* adjust default settings for Animation Editors */ for (sc= main->screen.first; sc; sc= sc->id.next) { ScrArea *sa; for (sa= sc->areabase.first; sa; sa= sa->next) { SpaceLink *sl; for (sl= sa->spacedata.first; sl; sl= sl->next) { switch (sl->spacetype) { case SPACE_ACTION: { SpaceAction *sact= (SpaceAction *)sl; sact->mode= SACTCONT_DOPESHEET; sact->autosnap= SACTSNAP_FRAME; } break; case SPACE_IPO: { SpaceIpo *sipo= (SpaceIpo *)sl; sipo->autosnap= SACTSNAP_FRAME; } break; case SPACE_NLA: { SpaceNla *snla= (SpaceNla *)sl; snla->autosnap= SACTSNAP_FRAME; } break; } } } } } if (main->versionfile < 248 || (main->versionfile == 248 && main->subversionfile < 3)) { Object *ob; /* Adjustments needed after Bullets update */ for (ob = main->object.first; ob; ob= ob->id.next) { ob->damping *= 0.635f; ob->rdamping = 0.1f + (0.8f * ob->rdamping); } } if (main->versionfile < 248 || (main->versionfile == 248 && main->subversionfile < 4)) { Scene *sce; World *wrld; /* Dome (Fisheye) default parameters */ for (sce= main->scene.first; sce; sce= sce->id.next) { sce->r.domeangle = 180; sce->r.domemode = 1; sce->r.domeres = 4; sce->r.domeresbuf = 1.0f; sce->r.dometilt = 0; } /* DBVT culling by default */ for (wrld=main->world.first; wrld; wrld= wrld->id.next) { wrld->mode |= WO_DBVT_CULLING; wrld->occlusionRes = 128; } } if (main->versionfile < 248 || (main->versionfile == 248 && main->subversionfile < 5)) { Object *ob; World *wrld; for (ob = main->object.first; ob; ob= ob->id.next) { ob->m_contactProcessingThreshold = 1.0f; //pad3 is used for m_contactProcessingThreshold if (ob->parent) { /* check if top parent has compound shape set and if yes, set this object * to compound shaper as well (was the behavior before, now it's optional) */ Object *parent= blo_do_versions_newlibadr(fd, lib, ob->parent); while (parent && parent != ob && parent->parent != NULL) { parent = blo_do_versions_newlibadr(fd, lib, parent->parent); } if (parent) { if (parent->gameflag & OB_CHILD) ob->gameflag |= OB_CHILD; } } } for (wrld=main->world.first; wrld; wrld= wrld->id.next) { wrld->ticrate = 60; wrld->maxlogicstep = 5; wrld->physubstep = 1; wrld->maxphystep = 5; } } // correct introduce of seed for wind force if (main->versionfile < 249 && main->subversionfile < 1) { Object *ob; for (ob = main->object.first; ob; ob= ob->id.next) { if (ob->pd) ob->pd->seed = ((unsigned int)(ceil(PIL_check_seconds_timer()))+1) % 128; } } if (main->versionfile < 249 && main->subversionfile < 2) { Scene *sce= main->scene.first; Sequence *seq; Editing *ed; while (sce) { ed= sce->ed; if (ed) { SEQP_BEGIN (ed, seq) { if (seq->strip && seq->strip->proxy) { seq->strip->proxy->quality =90; } } SEQ_END } sce= sce->id.next; } } /* WATCH IT!!!: pointers from libdata have not been converted yet here! */ /* WATCH IT 2!: Userdef struct init has to be in editors/interface/resources.c! */ /* don't forget to set version number in blender.c! */ }