* bugfixes in sprite handling.
[swftools.git] / lib / rfxswf.h
index af27585..9fb2546 100644 (file)
@@ -95,7 +95,7 @@ typedef struct _MATRIX
 } MATRIX, * LPMATRIX;
 
 typedef struct _CXFORM
-{ S16           a0, a1;
+{ S16           a0, a1; /* mult, add */
   S16           r0, r1;
   S16           g0, g1;
   S16           b0, b1;
@@ -126,6 +126,22 @@ typedef struct _TAG             // NEVER access a Tag-Struct directly !
   
 } TAG, * LPTAG;
 
+typedef struct _SOUNDINFO 
+{
+    U8 stop;
+    U8 multiple; //continue playing if already started
+
+    U32 inpoint;
+    U32 outpoint;
+
+    U16 loops;
+    U8 envelopes;
+
+    //envelope:
+    U32* pos;
+    U32* left;
+    U32* right;
+} SOUNDINFO;
 
 typedef struct _SWF
 { U8            fileVersion;
@@ -162,6 +178,10 @@ void swf_UnFoldAll(SWF*swf);
 void swf_FoldSprite(TAG*tag);
 void swf_UnFoldSprite(TAG*tag);
 
+// tag reordering:
+
+void swf_OptimizeTagOrder(SWF*swf);
+
 // basic routines:
     
 TAG * swf_InsertTag(TAG * after,U16 id);    // updates frames, if necessary
@@ -208,6 +228,13 @@ int   swf_SetCXForm(TAG * t,CXFORM * cx,U8 alpha);
 int   swf_SetRGB(TAG * t,RGBA * col);
 int   swf_SetRGBA(TAG * t,RGBA * col);
 
+// helper functions:
+
+void swf_ExpandRect(SRECT*src, SPOINT add);
+void swf_ExpandRect2(SRECT*src, SRECT*add);
+SPOINT swf_TurnPoint(SPOINT p, MATRIX* m);
+SRECT swf_TurnRect(SRECT r, MATRIX* m);
+
 // Function Macros
 
 #define swf_GetS8(tag)      ((S8)swf_GetU8(tag))
@@ -215,6 +242,7 @@ int   swf_SetRGBA(TAG * t,RGBA * col);
 #define swf_GetS32(tag)     ((S32)swf_GetU32(tag))
 #define swf_GetCoord(tag)   ((SCOORD)swf_GetU32(tag))
 #define swf_GetFixed(tag)   ((SFIXED)swf_GetU32(tag))
+#define swf_GetString(t)    ((char*)(&(t)->data[(t)->pos]))
 
 #define swf_SetS8(tag,v)    swf_SetU8(tag,(U8)v)
 #define swf_SetS16(tag,v)   swf_SetU16(tag,(U16)v)
@@ -255,6 +283,7 @@ int   swf_SetRGBA(TAG * t,RGBA * col);
 #define ST_PROTECT              24 /* This file should not be importable for editing. */
 #define ST_PLACEOBJECT2         26 /* The new style place w/ alpha color transform and name. */
 #define ST_REMOVEOBJECT2        28 /* A more compact remove object that omits the character tag (just depth). */
+#define ST_FREEALL              31 /* ? */
 #define ST_DEFINESHAPE3         32 /* A shape V3 includes alpha values. */
 #define ST_DEFINETEXT2          33 /* A text V2 includes alpha values. */
 #define ST_DEFINEBUTTON2        34 /* A button V2 includes color transform, alpha and multiple actions */
@@ -615,8 +644,11 @@ int swf_SetLosslessBitsGrayscale(TAG * t,U16 width,U16 height,U8 * bitmap);
 
 // swfsound.c
 void swf_SetSoundStreamHead(TAG*tag, int avgnumsamples);
-/* expects 2304 samples */
-void swf_SetSoundStreamBlock(TAG*tag, S16*samples, char first);
+void swf_SetSoundStreamBlock(TAG*tag, S16*samples, char first); /* expects 2304 samples */
+
+void swf_SetSoundDefine(TAG*tag, S16*samples, int num);
+
+void swf_SetSoundInfo(TAG*tag, SOUNDINFO*info);
 
 #endif // RFXSWF_DISABLESOUND