TAG*tag;
int t;
SRECT box;
- int fileversion = 1;
+ int fileversion = config.zlib?6:3;
int frameRate = 256;
RGBA rgb;
rgb.r=rgb.b=rgb.g=0;
case ST_SETBACKGROUNDCOLOR:
msg("<debug> deliberately ignoring BACKGROUNDCOLOR tag");
break;
+ case ST_SHOWFRAME:
+ msg("<debug> deliberately ignoring SHOWFRAME tag");
+ break;
+ case ST_REFLEX:
+ msg("<debug> deliberately ignoring REFLEX tag");
+ break;
case 40:
case 49:
case 51:
- msg("<notice> found tag %d. This is a Generator template, isn't it?", tag->id);
+ msg("<notice> found tag %d. This is a Generator template, isn't it?", rtag->id);
break;
default:
- msg("<notice> funny tag: %d is neither defining nor sprite", tag->id);
+ msg("<notice> funny tag: %d is neither defining nor sprite", rtag->id);
}
}
}
void changedepth(TAG*tag, int add)
{
- /* fucking byteorders */
if(tag->id == ST_PLACEOBJECT)
PUT16(&tag->data[2],GET16(&tag->data[2])+add);
if(tag->id == ST_PLACEOBJECT2)
PUT16(&tag->data[2],GET16(&tag->data[2])+add);
if(tag->id == ST_REMOVEOBJECT2)
PUT16(&tag->data[0],GET16(&tag->data[0])+add);
+ if(tag->id == ST_PLACEOBJECT2) {
+ SWFPLACEOBJECT obj;
+ U8 flags;
+ swf_SetTagPos(tag, 0);
+ flags = swf_GetU8(tag);
+ if(flags&2) swf_GetU16(tag); //id
+ if(flags&4) swf_GetMatrix(tag, 0);
+ if(flags&8) swf_GetCXForm(tag, 0,1);
+ if(flags&16) swf_GetU16(tag); //ratio
+ if(flags&64) {
+ swf_ResetReadBits(tag);
+ printf("%d->%d\n", GET16(&tag->data[tag->pos]),
+ GET16(&tag->data[tag->pos])+add);
+ PUT16(&tag->data[tag->pos],GET16(&tag->data[tag->pos])+add);
+ }
+ msg("<warning> Depth relocation not fully working yet with clipdepths", tag->id);
+ }
}
void matrix_adjust(MATRIX*m, int movex, int movey, float scalex, float scaley, int scalepos)
rtag->id, rtag->len);
tag = swf_InsertTag(tag, rtag->id);
write_changepos(tag, rtag, config.movex, config.movey, config.scalex, config.scaley, 0);
-
- changedepth(tag, +2);
+
+ if(config.clip || (config.overlay && !config.isframe))
+ changedepth(tag, +2);
if(tag->id == ST_SHOWFRAME)
{
int frame = 0;
int sframe = 0;
int slavewritten = 0;
+ int deletedepth = -1;
TAG* rtag = master->firstTag;
TAG* stag = slave->firstTag;
swf_SetBlock(tag, rtag->data, rtag->len);
}
}
- if(frame == slaveframe)
+ if(frame == slaveframe) /* only happens with config.isframe: put slave at specific frame */
{
if(flags&FLAGS_WRITESLAVE) {
outputslave = 1;
if((flags&FLAGS_WRITESPRITE) && !slavewritten)
{
int id = get_free_id(masterbitmap);
- int depth = 0;
+ int depth = 65535;
+ deletedepth = 65536;
if(config.clip) {
msg("<fatal> Can't combine --clip and --frame");
}
rtag->id, rtag->len);
tag = swf_InsertTag(tag, rtag->id);
write_changepos(tag, rtag, config.mastermovex, config.mastermovey, config.masterscalex, config.masterscaley, 1);
+
+ if(rtag->id == ST_SHOWFRAME && deletedepth) {
+ tag = swf_InsertTag(tag, ST_REMOVEOBJECT2);
+ swf_SetU16(tag, deletedepth);
+ deletedepth = -1;
+ }
}
}
rtag = rtag->next;
}
swf_Relocate (slave, masterbitmap);
- swf_RelocateDepth (slave, depthbitmap);
+ if(config.merge)
+ swf_RelocateDepth (slave, depthbitmap);
jpeg_assert(slave, master);
if (config.overlay)
fi = open(outputname, O_BINARY|O_RDWR|O_TRUNC|O_CREAT, 0777);
- if(config.zlib)
+ if(config.zlib) {
+ if(newswf.fileVersion < 6)
+ newswf.fileVersion = 6;
swf_WriteSWC(fi, &newswf);
- else {
+ } else {
newswf.compressed = 0;
swf_WriteSWF(fi, &newswf);
}