]> git.rm.cloudns.org Git - xonotic/darkplaces.git/commitdiff
modeldecompile: also write a framegroups file if possible
authordivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Sat, 13 Mar 2010 18:27:09 +0000 (18:27 +0000)
committerdivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Sat, 13 Mar 2010 18:27:09 +0000 (18:27 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@10053 d7cf8633-e32d-0410-b094-e92efae38249

model_alias.c
model_iqm.h
model_shared.c

index 9d82070636766aaeb9a55813468a2a39be3ef94b..1bb43e4e0c4945d0b3e5447b6ec57a74cd51cdb4 100644 (file)
@@ -3010,7 +3010,7 @@ void Mod_PSKMODEL_Load(dp_model_t *mod, void *buffer, void *bufferend)
                        loadmodel->animscenes[i].firstframe = i;
                        loadmodel->animscenes[i].framecount = 1;
                        loadmodel->animscenes[i].loop = true;
-                       loadmodel->animscenes[i].framerate = 10;
+                       loadmodel->animscenes[i].framerate = anims[index].fps;
                }
        }
 
@@ -3287,8 +3287,8 @@ void Mod_INTERQUAKEMODEL_Load(dp_model_t *mod, void *buffer, void *bufferend)
                        dpsnprintf(loadmodel->animscenes[j].name, sizeof(loadmodel->animscenes[i].name), "%s_%d", &text[anim[i].name], j - anim[i].first_frame);
                        loadmodel->animscenes[j].firstframe = j;
                        loadmodel->animscenes[j].framecount = 1;
-                       loadmodel->animscenes[j].loop = true;
-                       loadmodel->animscenes[j].framerate = 10;
+                       loadmodel->animscenes[i].loop = ((anim[i].flags & IQM_LOOP) != 0);
+                       loadmodel->animscenes[j].framerate = anim[i].framerate;
                }
        }
        
index 78197162ec29ac5804d541f9e64f5b5124b83b2a..c9222a55b60cfa3fa754a11152f9cbb03a0bc4df 100644 (file)
@@ -48,6 +48,9 @@ iqmmesh_t;
 #define IQM_FLOAT   7
 #define IQM_DOUBLE  8
 
+// animflags
+#define IQM_LOOP 1
+
 typedef struct iqmtriangle_s
 {
        unsigned int vertex[3];
index 71ae765dd900822954f6318e4317f37408a5413f..aada40888debea42f7f9d0bb4fcbd8706f1123c2 100644 (file)
@@ -2948,8 +2948,10 @@ static void Mod_Decompile_f(void)
        char animname2[MAX_QPATH];
        char zymtextbuffer[16384];
        char dpmtextbuffer[16384];
+       char framegroupstextbuffer[16384];
        int zymtextsize = 0;
        int dpmtextsize = 0;
+       int framegroupstextsize = 0;
 
        if (Cmd_Argc() != 2)
        {
@@ -3037,19 +3039,26 @@ static void Mod_Decompile_f(void)
                        Mod_Decompile_SMD(mod, outname, first, count, false);
                        if (zymtextsize < (int)sizeof(zymtextbuffer) - 100)
                        {
-                               l = dpsnprintf(zymtextbuffer + zymtextsize, sizeof(zymtextbuffer) - zymtextsize, "scene %s.smd fps %g\n", animname, mod->animscenes[i].framerate);
+                               l = dpsnprintf(zymtextbuffer + zymtextsize, sizeof(zymtextbuffer) - zymtextsize, "scene %s.smd fps %g %s\n", animname, mod->animscenes[i].framerate, mod->animscenes[i].loop ? "" : " noloop");
                                if (l > 0) zymtextsize += l;
                        }
                        if (dpmtextsize < (int)sizeof(dpmtextbuffer) - 100)
                        {
-                               l = dpsnprintf(dpmtextbuffer + dpmtextsize, sizeof(dpmtextbuffer) - dpmtextsize, "scene %s.smd\n", animname);
+                               l = dpsnprintf(dpmtextbuffer + dpmtextsize, sizeof(dpmtextbuffer) - dpmtextsize, "scene %s.smd fps %g %s\n", animname, mod->animscenes[i].framerate, mod->animscenes[i].loop ? "" : " noloop");
                                if (l > 0) dpmtextsize += l;
                        }
+                       if (framegroupstextsize < (int)sizeof(framegroupstextbuffer) - 100)
+                       {
+                               l = dpsnprintf(framegroupstextbuffer + framegroupstextsize, sizeof(framegroupstextbuffer) - framegroupstextsize, "%d %d %f %d // %s\n", first, count, mod->animscenes[i].framerate, mod->animscenes[i].loop, animname);
+                               if (l > 0) framegroupstextsize += l;
+                       }
                }
                if (zymtextsize)
                        FS_WriteFile(va("%s_decompiled/out_zym.txt", basename), zymtextbuffer, (fs_offset_t)zymtextsize);
                if (dpmtextsize)
                        FS_WriteFile(va("%s_decompiled/out_dpm.txt", basename), dpmtextbuffer, (fs_offset_t)dpmtextsize);
+               if (framegroupstextsize)
+                       FS_WriteFile(va("%s_decompiled.framegroups", basename), framegroupstextbuffer, (fs_offset_t)framegroupstextsize);
        }
 }