I work for a game development studio in London. We are prototyping using Autodesk Scaleform and building our game UI using Flash. We will need to be able to run a large project with a team of 3-4 artists and 10+ programmers. We use Perforce source control system for storage of all code and assets. We need to be able to manage a project with multiple shared resources and multiple people (artists & programmers) working on screens and controls.
Our problem is as follows:
We want to be able to create skinned graphical custom components, such as buttons, sliders, checkboxes as well as more complex controls such as tables and game specific elements.
We want to be able to share graphics assets in a single location and allow multiple artists and coders to work on shared components simultaneously. We need all of this to be stored in a Perforce source control repository.
For AS3 code this is all fairly straight forward. It works like any other codebase and we have set up FlashBuilder and FlashDevelop projects.
Now, the options seem to be as follows:
- Create a flash project or projects. The problem here is that all of the assets are copied into AuthortimeSharedAssts.fla. This means that, because FLA is a binary format, our source control cannot allow more than one person to edit any shared resource at the same time.
- Set up manual authortime sharing. This will allow work on multiple shared components because individuals can update a small discrete FLA file and this will automatically update a larger shared librar. The problem is that this does not allow sharing of graphics assets, which means that, if an artist updates a graphic, this does not filter down to individual flash files.
- Use the XFL format. This would allow us to merge files when checking in to source control as they are plain text and it saves out individual assets as separate files, which looks perfect. The problem is that I can't see how to make a project, which entirely uses XFL files (i.e. makes something like AuthortimeSharedAssets.xfl).
At the moment I can't see any obvious, sensible way of running a large project in Flash. We cannot be the first to do this sort of thing though.
Can anyone help or explain how we should do it?
Whilst this will complicate things i'm sure, I highly, highly, highly recommend you DON'T work on your FLA's live off a networked location.
Flash has a huge bug that will corrupt your source files when they are saved on a network location. The files are unrecoverable.
See more here:
For this reason, people will need to work on any FLA's off their local drive, before putting it back in your shared repository when done.
I imagine this will complicate your workload more. But I'd hate for you to lose a ton of development time, like I have, due to this terrible error.
(I don't know if this error would be replicated in your source control system, as i'm not familiar with it, but I thought i'd mention it anyway.)
I'm having almost the same problems now as you have! I'm working on a game that has all of graphical assets in one huge FLA file that is exported as SWC library.
My problem is that we want to split this huge file into several smaller ones and then creating new FLA file for each new screen.
We are using RSL to share assets between different FLA files.
Eg. fonts.fla is having three fonts in library exported for runtime sharing. graphic_hsl.fla contains high score list graphics and having fonts.swc imported for runtime sharing.
I think you should think about RSL as they give you ability to edit graphical assets in one file and it will be automatically updated whereever you used it in other FLA files.
We tried with XFL file format, but at the end we switched back to FLA as version control is not really useful with XFL. It has very complex structure and changing file from two different computers at the same time pretty much breaks things! So no merging with SVN, Git or whatever you are using!
They have some case studies on their site with articles of developers that used the tool in their production pipeline.
Just an $0.02 that is probably the hardest solution to implement, you really need a good project manager. You can't expect great results from tossing a bunch of autonomous bodies in motion on shared resources with no human control mechanism. Software can help but your format is ultimately binary, so outside Smart Objects (which haven't worked well in a networked multi-OS environment for me), you're not going to gain the benefits of traditional diff for source code.
Consider implementing either a project manager or even better, a project manager with decent project management software. It can be as cheap as Copper Project. You're given a hud with tasks and it's up to the Project Manager to assign the tasks so nothing overlaps and collisions are avoided from the start. It's even a large challenge in the binary world for a high quality Project Manager.
If you really need a garage level setup, you may simply have to employ locking network files that are in use. Anyone trying to use something won't be able to, it will stifle progress but you won't run into overlaps or impossible merges. It's just brute force and inefficient.