One of the tips I gave in my recent talk is to have a tool for GGJ. My tool of choice is AngelXNA, because it combines the power of XNA with the power of Angel. When I was demoing it to the other attendees, I realized I hadn't added a few demo screens that are really necessary.
To that end, I've added two demo screens showcasing two features that are in AngelXNA that aren't in Angel. The first is the Editor. While I had a problem with the Editor in the last GGJ, Fire Hose used it a lot for prototyping and I think we've worked out most of the kinks. It's not perfect, but it does make creating levels in Angel super easy. There are shortcuts for cloning, scaling, and rotating actors, which makes the level editing process super quick.
The second feature has several aspects, but comes down to the ability to use sprite sheets and the ability to create named, data driven animations. There are two parts to this. The first part is the Tiling system. By adding a .tileinfo file parallel to any given image file, it will automatically start rendering Actors that use that image as tiled. Here's an example .tileinfo:
IsAnim = true FrameSize = Vector2(160, 200) AnimDirection = TiledAnimDirection.Horizontal StartFrame = Vector2(0, 0) EndFrame = Vector2(0, 2)
It specifies that this file contains an animation, that each frame is 160x200, that the animation frames run left to right, starts at 0,0, and ends at 0,2. You can also use a non-anim and specify a specific tile to render.
Once you have these .tileinfos specified, you can specify animation files. Here's the example anim file:
BeginAnimation("Idle", TiledAnimRenderPath.Create()) AnimDelay = 0.03 File = "images/devo/devo_idle_strip" AnimType = AnimationType.Loop EndAnimation() BeginAnimation("Run", TiledAnimRenderPath.Create()) AnimDelay = 0.03 File = "images/devo/devo_run_strip" AnimType = AnimationType.Loop EndAnimation() BeginAnimation("Fall", TiledAnimRenderPath.Create()) AnimDelay = 0.03 File = "images/devo/devo_fall_strip" AnimType = AnimationType.OneShot EndAnimation()
This allows you to call just Actor.PlayAnimation("Idle") or Actor.PlayAnimation("Run").
This is still a bit more complicated than I'd like, but does work really well. The only thing I'd like to improve is the specification of the render path. AngelXNA actually generally selects the correct render path automatically, but the data driving system, specifically the animation system, isn't detecting its render path. I can probably fix this, which I'll hopefully do after GGJ.