1 # ===========================================================================
3 # swfc(1) File format specification
5 # Warning: not all of this is actually implemented yet- if there's a
6 # "TODO" behind a command, it has yet to be integrated into swfc.
8 # ===========================================================================
13 .flash bbox=200x200 version=6 fps=50 name="spec.swf" compress
15 # bbox=200x200 : set bounding box to 200x200
16 # bbox=200x200:100:100 : set bounding box to (100,100)-(300,300)
17 # bbox=autocrop : (default) - make bbox just big enough so that nothing ever get's clipped
19 # all coordinates are in pixels, not in twips. fixed point values like 1.25, 333.40 are allowed.
21 # version=6 : generate flash mx movie
22 # fps=50 : set framerate to 50 frames/second
23 # name="..." : save result to spec.flash. (Default: input file with extension
24 # changed to .flash, or the value of the -o command line
28 # ---------------------
30 .swf mymovie1 "choo1.swf"
31 .swf mymovie2 filename="choo1.swf" # long form
32 .swf mymovie3 filename=choo1.swf # long form, without quotes
33 .swf mymovie4 choo1.swf # short form, without quotes
35 # Notice: An embedded animation can't have a different framerate than
36 # the frame rate from the surrounding animation.
38 #TODO: Those files currently come from the current directory- they should come from the script directory.
43 .jpeg background "panorama.jpg"
44 .jpeg background2 "panorama.jpg" quality=30% #reduces jpeg quality
46 .png background3 "choochoo.png" #TODO
48 # (you can put this directly (generating a shape), or insert it into a shape via the fill= argument
50 # define a texture from an image:
51 # -------------------------------
53 .texture text1=background scale=50% rotate=45
84 # define a texture from a gradient:
85 # ---------------------------------
87 .texture grad2=mygradient x=0 y=0 width=125 height=200 rotate=45
89 # Create simple objects:
90 # ----------------------
92 .box mybox1 width=100 height=50 color=black fill=none #unfilled rectangle (just the lines)
93 .box mybox2 width=100 height=50 color=black #same as above
94 .box mybox3 width=100 height=50 color=black fill #filled black rectangle
95 .box mybox4 width=100 height=50 color=red line=2 fill=blue #blue rectangle with red edges
96 .box mybox5 width=100 height=50 color=red line=2 fill=background #filled with image "background", with red edges
98 .circle mycircle1 r=50 color=#aa33ff fill=mygradient # filled with gradient (defined above)
99 .circle mycircle1 r=50 color=#aa33ff fill=grad2 # filled with gradient texture
104 .sound sound1 "LocoStart.wav"
107 .play sound1 loop=1 #other arguments supported: nomultiple (don't start if already playing)
112 # this starts a synchronized soundtrack at this frame position. The command
113 # expects a filename, not a sound object, as it would be duplicating the
114 # sound object otherwise, and I'd rather have that done explicitly.
115 .soundtrack "LocoStart.wav" # TODO
117 # Elements of the movie should be animated by various means
118 # moving (x,y and zoom)
119 # ---------------------
121 .box obj1 width=200.0 height=100.0
124 .put obj1 x=0 y=0 #object starts at (0,0)
127 .change obj1 x+=100 y=0 scale=120% # smoothly move obj1 100 pixels to the right over 40 frames,
128 # scaling it to 120% of it's original size
130 .jump obj1 x=200 y=200 # make object to suddenly change to 200,200 at frame 70.
133 .qchange obj1 x=300 y=200 # TODO # make obj1 move towards 300,200...
135 .qchange obj1 x=300 y=300 # TODO # ... and then smoothly over to 300,300 using bspline interpolation
138 # .jump obj1 x=reset y=reset
141 .del obj1 #Remove object again
152 .morphshape morphthing start=shape1 end=shape2
154 .put morphthing ratio=0%
156 .change morphthing ratio=100%
158 # interpolation between crude manual animation frames
159 # ---------------------------------------------------
161 .circle ball r=50 color=blue fill=violet
163 # now draw two balls, which fly around each other.
166 .put myball1=ball x=0 y=100 blue=0
167 .put myball2=ball x=100 y=100 red=0
170 # the .qchange means, "interpolate to this position and frame, using quadratic splines".
171 .qchange myball1 x=50 y=0 #TODO
172 .qchange myball2 x=50 y=100 #TODO
175 # We could also use coordinates relative to start position: .change myball1 x+=100 y+=0
176 .qchange myball1 x=100 y=100 #TODO
177 .qchange myball2 x=0 y=100 #TODO
180 .qchange myball1 x=50 y=100 #TODO
181 .qchange myball2 x=50 y=0 #TODO
184 # Hmmm. This frame is the same as frame 0. How to prevent duplicating that one?
185 .qchange myball1 x=0 y=100 #TODO
186 .qchange myball2 x=100 y=100 #TODO
188 # color transforms (fading)
189 # -------------------------
191 # .put, .change, .qchange, .jump all support params which result in color transform.
192 # Everything up to the + is multiplicated, the rest summed.
194 .put obj1 blue=50% #(scale blue color component to 50%)
195 .change obj1 blue=128 #(same as above)
196 .change obj1 red=+25% #(shift blue color component by 25%)
197 .change obj1 red=+64 #(same as above)
198 .change obj1 green=50%+50% #(scale green color component to 50% and then shift it by 50%)
199 .change obj1 green=128+128 #(same as above)
200 .change obj1 green=-1+255 #(invert green color component)
201 .change obj1 green=2-128 #(reduce spectrum for green to the upper 50%)
202 .change obj1 luminance=50% #(fade all color components 50% to black, same as red=50% green=50% blue=50%)
203 .change obj1 alpha=50% #(make object 50% transparent)
208 .change obj1 scale=50% # change an object to 50% of it's size
209 .change obj1 scaley=50% # flatten object to 50% of it's height
210 .change obj1 scaley=110% scalex=75% #(funhouse mirror!)
215 .change obj1 rotate=45 # tilt object, counterclockwise
220 .change obj1 shear=100% # shear object
222 # sprites (a.k.a. movieClips)
226 .frame 1 .put ball1=ball 0 0
227 .frame 2 .change ball1 100 100
231 .frame 1 .put ball2=ball 100 0
232 .frame 7 .change ball2 0 100
239 # so spr1 has three frames, spr2 has seven. The whole animation loops after 21 frames.
241 # multi-level nesting: (sprites can be nested to any depth)
251 # clipping an animation inside a star-shaped sprite:
253 .swf mystar1 "star.swf"
254 .swf anim1 "penguins.swf"
264 .change cspr1 rotate=360
269 .png play "Play.png" #TODO
270 .png play_pressed "Play_pressed.png" #TODO
271 .png stoplogo "Stop.png" #TODO
276 .show play_pressed as=pressed
277 .show play_pressed as=hover
296 .show obj1 x=300 y=400 scale=110% pivot=center
301 .box greenshape 10 10
302 .box whiteshape 10 10
303 .box activearea 10 10
304 .box emtpyshape 10 10
306 # button which is blue, get's green when the mouse hovers over it, and
307 # white when it is pressed:
309 .show blueshape as=idle
310 .show greenshape as=hower
311 .show whiteshape as=press
314 # button where the button position is not identical to the active area:
316 .show activearea as=area
317 .show blueshape as=idle
318 .show greenshape as=hower
319 .show whiteshape as=press
322 # (if area is not set, it's the same as shape)
324 # the above put into use: pop up a window if the mouse cursor enters a certain
327 .show activearea as=area
328 .show emtpyshape as=idle
329 .show window1 as=hower
334 .font font1 "myfont.swf"
335 .font font1 "myfont.ttf"
336 .font font1 "myfont.pfa"
340 .text mytext1 font=font1 text="I am a happy little scroll message" color=blue size=100%
344 #(field where the flash animation can get input from the user)
346 .font helvetica "helvetica-bold.swf"
347 .edittext edittext1 text="Type something here" color=blue maxlength=200 font=helvetica size=24 width=320 height=200 #TODO
348 # width/height: dimensions of the box
349 # text: The text which appears initally in the box, and can be overwritten by the user
350 # maxlength: max. length of the text the user can type
351 # color/font/size: Font appeareance
352 # variable: Name of the actionscript variable the text is stored in
353 # The following boolean options are also supported:
354 # password (show input only as stars), wordwrap, multiline, html, noselect, readonly
364 # -------------------
365 # .put, .change, .qchange, .jump, .startclip take before and after parameters,
366 # which can be used to specify the depth of an object
369 .put o2=obj1 below=o1 x=50 #TODO
372 .change o2 above=o1 x=50 #TODO
374 # newline conventions
375 # -------------------
377 # All Newlines are treated as normal whitespace. Therefore, splitting
378 # commands over several lines, like
386 # Furthermore, having more than one command in one line is also possible:
388 .frame 600 .change obj1 x+=700 .change obj2 x+=300
389 .frame 601 .change obj1 x+=500 .change obj2 x+=500
390 .frame 602 .change obj1 x+=300 .change obj2 x+=700
392 .end # end of first file