diff --git a/source/blender/blenkernel/intern/ipo.c b/source/blender/blenkernel/intern/ipo.c index bbc1874c2ae..f51fee674cf 100644 --- a/source/blender/blenkernel/intern/ipo.c +++ b/source/blender/blenkernel/intern/ipo.c @@ -46,6 +46,7 @@ /* since we have versioning code here */ #define DNA_DEPRECATED_ALLOW +#include "DNA_actuator_types.h" #include "DNA_anim_types.h" #include "DNA_constraint_types.h" #include "DNA_camera_types.h" @@ -1753,6 +1754,24 @@ void do_versions_ipos_to_animato(Main *main) ipo_to_animdata(id, ob->ipo, NULL, NULL, NULL); ob->ipo->id.us--; ob->ipo = NULL; + + { + /* If we have any empty action actuators, assume they were + converted IPO Actuators using the object IPO */ + bActuator *act; + bActionActuator *aa; + + for (act = ob->actuators.first; act; act = act->next) { + /* Any actuators set to ACT_IPO at this point are actually Action Actuators that + need this converted IPO to finish converting the actuator. */ + if (act->type == ACT_IPO) + { + aa = (bActionActuator*)act->data; + aa->act = ob->adt->action; + act->type = ACT_ACTION; + } + } + } } } diff --git a/source/blender/blenloader/intern/versioning_250.c b/source/blender/blenloader/intern/versioning_250.c index 5ed39ad5307..bfaa526b995 100644 --- a/source/blender/blenloader/intern/versioning_250.c +++ b/source/blender/blenloader/intern/versioning_250.c @@ -2558,11 +2558,11 @@ void blo_do_versions_250(FileData *fd, Library *lib, Main *main) for (ob = main->object.first; ob; ob = ob->id.next) { for (act = ob->actuators.first; act; act = act->next) { if (act->type == ACT_IPO) { - // Create the new actuator + /* Create the new actuator */ ia = act->data; aa = MEM_callocN(sizeof(bActionActuator), "fcurve -> action actuator do_version"); - // Copy values + /* Copy values */ aa->type = ia->type; aa->flag = ia->flag; aa->sta = ia->sta; @@ -2572,12 +2572,18 @@ void blo_do_versions_250(FileData *fd, Library *lib, Main *main) if (ob->adt) aa->act = ob->adt->action; - // Get rid of the old actuator + /* Get rid of the old actuator */ MEM_freeN(ia); - // Assign the new actuator + /* Assign the new actuator */ act->data = aa; act->type = act->otype = ACT_ACTION; + + /* Fix for converting 2.4x files: if we don't have an action, but we have an + object IPO, then leave the actuator as an IPO actuator for now and let the + IPO conversion code handle it */ + if (ob->ipo && !aa->act) + act->type = ACT_IPO; } else if (act->type == ACT_SHAPEACTION) { act->type = act->otype = ACT_ACTION;