This post was originally started back on Oct 31, 2006. It has since been rewritten three times.

With the advent of Burning Crusade, I was pretty torn on how to respec my hunter. I’d played up into my 50’s as a heavy marksmanship build before switching to heavy survival. I’d meant to post my build ideas before the expansion landed, but I was otherwise occupied.

Currently, I am back to a very heavy marksmanship build (43 points). I’d planned on spending the remaining 18 in survival, but decided against it when I dinged 61. At present, I have a 1/43/9 build and am planning on spending my remaining points in the recently upgraded low tier beast talents in an attempt to increase my general durability.

== current build – 9/43/9 ==

The general thought behind my current build is reliable damage. I don’t crit nearly as much as I used to, but I hit hard and I hit consistently, and I can continue doing damage even when low on mana.

Beast Mastery (9 points)
    5/5 Endurance Training
    1/2 Focused Fire
    3/3 Thick Hide

There’s not a whole lot to say about these talents except that they’re much better than they used to be. Endurance Training and Thick Hide together give me +5% hp and +10% armour from eq and give my pet +10% hp and +20% armour.

The point in Focused Fire is planned as my my lvl 70 talent. It gives +1% damage output and +10% crit to kill command. It might almost be worth getting two points in Focused Fire for the additional +1% damage in exchange for a small loss in defense.

Marksmanship (43 points)
    5/5 Lethal Shots
    5/5 Improved Hunter's Mark
    5/5 Efficiency
    2/2 Go for the Throat
    1/1 Aimed Shot
    2/2 Rapid Killing
    5/5 Mortal Shots
    3/3 Concussive Barrage
    1/1 Scatter Shot
    2/2 Combat Experience
    5/5 Ranged Weapon Specialization
    1/1 Trueshot Aura
    5/5 Master Marksman
    1/1 Silencing Shot

Not a lot to say here. My goal here was to get Silencing Shot. It’s nice. I like it. I wish the cooldown were a bit shorter, but it does still work well as a ranged interrupt (the only reliable ranged spell interrupt in the game, I believe). More importantly, it allows you to pull casters. This has always been a pain, LoS pulls not generally being possible in wide open places ;)

Efficiency is critical. Every build should have it. 10% reduction in mana costs to shots and stings (where 99% of your mana is going in the first place…) are not to be underestimated. Especially for a hybrid class that gets way less mana than full caster types.

Rapid Killing is nice. It’s only two points and it gives you a 20 second buff when you kill something that gives you +20% damage to your next hit. This encourages opening combat with Aimed Shot. In addition, these two points also reduce your Rapid Fire cooldown by 40%.

Rapid Fire is amazing. +40% ranged attack speed for 15 seconds in exchange for 100 mana. So… in stead of firing one arrow every 2.5 seconds, you wind up firing every 1.8 seconds. What that really translates to is an extra 2 shots for 100 mana. The single most mana efficient attack ability hunters ever get.

Concussive Barrage isn’t that impressive initially. Woo hoo. It dazes your opponents. Occasionally. This sort of thing would be nice while kiting… but you’re prolly already using concussive shot and frost traps already… No, what Concussive Barrage is really all about is the new shot that hunters get at lvl 62.

Steady Shot costs 110 mana and can be fired off once a second. It does (RAP * 0.3) + 150 damage and an additional 175 damage to dazed targets. Thus, if you pay attention and spam steady whenever your concussive daze goes off… you can get 3 or 4 hits in on the dazed target for some happy bonus damage.

Survival (9 points)
    3/3 Monster Slaying
    3/3 Humanoid Slaying
    3/3 Hawk Eye

The nine points in survival go well with any build.

Hawk Eye is absolutely critical, however. With it, hunters have the longest attack range of any class in the game. Without it… shrug.

Monster and Humanoid Slaying give +3% to all damage dealt to beasts, humanoids, dragons, and giants and an additional +3% to crit damage against them. These mobs make up the vast majority of the killable things in the game. You can do a lot worse than to spend points here.

== heavy crit – 0/20/41 ==

The general idea behind this build is to crit hard and to crit often.

Beast Mastery (0 points)
    None

Marksmanship (20 points)
    5/5 Lethal Shots
    2/5 Improved Arcane Shot
    5/5 Efficiency
    1/1 Aimed Shot
    2/2 Rapid Killing
    5/5 Mortal Shots

Survival (41 points)
    3/3 Monster Slaying
    3/3 Humanoid Slaying
    3/3 Hawk Eye
    5/5 Deflection
    5/5 Survivalist
    3/3 Surefooted
    3/3 Killer Instinct
    5/5 Lightning Reflexes
    3/3 Thrill of the Hunt
    1/1 Wyvern Sting
    3/3 Expose Weakness
    4/5 Master Tactician

Wyvern Sting is great (12 sec crowd control, 2 minute cooldown). Now that you can use it in combat, it’s even better. It’s awesomely fun in PvP, and is one of the only ways I know of to reliably take people down as they fly past you on their epic mounts. If you go anywhere near this deep into Survival, it’d be a crime not to pick up Wyvern.

Killer Instinct is an additional +3% to crit rate on top of the +5% you pick up from Lethal Shots. With the +3% to hit from Surefooted, you will be scoring dramatically more crits with just these few talents alone. Add in +15% agility from Lightning Reflexes, and that crit chance goes up even higher.

Thrill of the Hunt means that any time one of your shots (aimed, arcane, steady) crits, you get 40% of the mana back.

Expose Weakness means that 30% of your crits cause everyone attacking your victim to get a heavy bonus to their attack power for 7 seconds.

Master Tactician means that every time you land a ranged hit, you have a 6% chance of getting a +8% buff to your crit chance for 8 seconds. I’m only grabbing 4 points here because I think the 5th point in Mortal Shots is worth slightly more than it would be here. Ie, that is a +2% to crit chance that is effective for 8 seconds after every 6% of your hits versus +6% to crit damage every time you crit.

== chainmail tank – 11/27/23 ==

This build is meant for hunters who somehow manage to keep taking damage. It’s not enough to make you tank better than, oh, say… a shaman… But it gives you some incredible survivability when you do wind up getting hit. The goal here is to avoid dying long enough to either kill your enemy or to run away.

Beast Mastery (11 points)
    5/5 Endurance Training
    3/3 Improved Aspect of the Monkey
    3/3 Thick Hide

Marksmanship (27 points)
    5/5 Lethal Shots
    5/5 Improved Hunter's Mark
    5/5 Efficiency
    2/2 Go for the Throat
    1/1 Aimed Shot
    2/2 Rapid Killing
    1/5 Mortal Shots
    3/3 Concussive Barrage
    1/1 Scatter Shot
    2/2 Combat Experience

Survival (23 points)
    1/3 Monster Slaying
    1/3 Humanoid Slaying
    3/3 Hawk Eye
    5/5 Deflection
    5/5 Survivalist
    1/1 Deterrence
    3/3 Surefooted
    2/2 Improved Feign Death
    2/2 Survival Instincts

4% damage reduction from Survival Instincts is not to be underestimated. That’s four percent of every hit from every source you ever take. This is better than getting +4% max hp. Much, much better.

Deflection is a very nice toy. +25% to both parry and dodge sounds like +50% to avoid getting hit to me. It only lasts 10 seconds, and is on a 5 minute cooldown, but 50% damage avoidance for 10 seconds can make an enormous difference. Throw improved monkey and deflection into the mix and you are now dodging at +39% and parrying at +30%.

Add do this the numbers I’ve already talked about from the other low tier beast talents and +10% more hp from Survivalist… it’s still not always enough.

There’s nothing shameful about running into a corner and playing dead.

Feign rarely fails against stuff of your own level or lower, but it frequently fails vs stuff that’s bigger than you. Improved Feign Death pretty much reduces your chance of failure to zero versus mobs of your own level, and gives you a very good chance against things 1 or 2 levels higher.

Scatter Shot is a great stalling tactic when running away. It works within the dead zone and as an instant cast, you can fire it while jumping around a corner.

Finally, the +15% chance to resist movement impairing effects (snares – daze?) from Surefooted can’t hurt when trying to get out of a crowd of uglies in order to find a safer place to fall over.

== machinegun dps – 7/45/9 ==

With the death of the old 10 second cycle and the improvements to arcane shot, I like the idea of a hunter build that can not only keep up with a rogue for burst dps, but can make the rogue look like a paladin by comparison. This is the closest I’ve come up with. Of course, it makes an OOMkin druid look like a Dark Pact warlock, but shrug ;)

As long as you keep yourself well hydrated, load up on mana regen eq and take advantage of Aspect of the Viper between fights and when low on juice, it can work.

Beast Mastery (7 points)
    5/5 Improved Aspect of the Hawk
    2/2 Focused Fire

Marksmanship (45 points)
    5/5 Lethal Shots
    5/5 Efficiency
    2/2 Go for the Throat
    5/5 Improved Arcane Shot
    1/1 Aimed Shot
    2/2 Rapid Killing
    5/5 Mortal Shots
    3/3 Concussive Barrage
    1/1 Scatter Shot
    2/2 Combat Experience
    5/5 Ranged Weapon Specialization
    3/3 Careful Aim
    1/1 Trueshot Aura
    5/5 Master Marksman

Survival (9 points)
    3/3 Monster Slaying
    3/3 Humanoid Slaying
    3/3 Hawk Eye

We’ve seen most of these talents before in the other heavy marks builds. But the philosophy behind this build is a bit different.

Improved Arcane Shot means a 16.7% increase in the rate at which you can bombard things with arcane damage. In addition to loading up on mana/5 eq, a healthy smattering of +spell/arcane damage eq would not be entirely wasted either. You’re still doing a mix of physical and arcane damage and should be switching over to Steady Shot whenever you daze an enemy, but the arcane shot damage is pretty impressive when you speed it up.

Rapid Killing is also still important in this build, much more so because of the 2 minute cooldown reduction on Rapid Fire. The extra 2 or 3 shots you get from Rapid Fire are two or three chances for physical damage crits on top of whatever you’re getting with arcane. When you have the Rapid Killing buff in place, consider opening fights with arcane in stead of aimed shots, a crit with magical damage can be a lot more impressive than with physical. And it’s faster.

In addition to spamming Rapid Fire and Arcane Shot, the other important part of this build concept is Improved Hawk. I’ve talked about this talent before (in basically every other post I’ve ever made on hunters), but it bears repeating here in context.

Improved Aspect of the Hawk gives you a 10% chance with every normal ranged attack of getting a +15% attack speed buff for 12 seconds. The 10% chance means that this effect should proc roughly once every 25 seconds of combat if you’ve got a 2.55 normal ranged attack rate (that’s a 3.0 second weapon and a +15% speed quiver). 12 second buffs proccing every 25 seconds = 50% of the time ;) Plus, of course, there’s also the slightly increased chance while the buff is active that the effect will proc again.

With a +15% speed quiver and a 1.8 speed weapon, you get a normal attack rate of 1.53 seconds. Improved hawk should proc roughly once every 15 seconds in this case, ie, it should be an almost constant effect that gives you an attack speed of closer to 1 second. Throw Rapid Fires off whenever you’re under the influence of the improve hawk effect and … your attack speed number suddenly becomes something closer to 0.36 for 15 seconds. That’s 41 arrows.

War Master Voone drops a lvl 55 green 1.6 speed bow. It’s only 36 dps, but…

== animal trainer – 46/12/3 ==

I am strongly tempted to play with this build, and I’m probably going to at least give it a whirl when I hit 63 and catch myself a warp stalker

The goal is to stand back and let your pet do all of the work. Fire normal shots with a fast bow and concentrate your mana on keeping your furry little assassin friend alive.

This is the only beast spec I’m going to discuss, so pay attention ;)

Beast Mastery (46 points)
    5/5 Endurance Training
    2/2 Focused Fire
    3/3 Thick Hide
    2/2 Improved Revive Pet
    5/5 Unleashed Fury
    2/2 Improved Mend Pet
    5/5 Ferocity
    2/2 Spirit Bond
    2/2 Bestial Discipline
    2/2 Animal Handler
    5/5 Frenzy
    3/3 Ferocious Inspiration
    3/3 Catlike Reflexes
    5/5 Serpent's Swiftness

Marksmanship (12 points)
    5/5 Lethal Shots
    5/5 Improved Hunter's Mark
    2/2 Go for the Throat

Survival (3 points)
    3/3 Hawk Eye

First off, the things I’m not picking up. I’m not grabbing Efficiency, I’m not grabing Rapid Killing, and I’m not grabbing the Human/Beast Slaying talents. You don’t need these as much here. You’re relying on your pet to do all of the work. Firing your own weapon (ideally something fast) is just a way of scoring crits in order to proc the 50 point focus regen bonus from Go for the Throat.

I’m also ignoring the whole Beast Within chain because I see it as primarily useful in PvP. The goal with this build is not to send a pet charging through fear spells to eat mages, it’s to let the pet eat mobs for you.

Ok, grabbing Improved Revive and Mend should be a no brainer for any beast spec hunter. Keeping your pet alive and getting rid of nasty debuffs is essential… Spirit Bond is also incredibly nice, 2% max hp regen every 10 seconds for both you and the pet equates to +40/5 hp regen if you have 4000 hp. This regen continues during combat.

Unleashed Fury means +20% dps. Ferocity means +10% crit rate. Bestial Discipline means 2x the focus regen (+whatever you’re giving your pet from ranged crits). Animal Handler means +4%. Catlike Reflexes means +9% dodge (on top of the +10% hp and +20% armour already mentioned). Improved Hunter’s Mark means your Mark is suddenly quite useful to your pet (increases their damage).

Serpent’s Swiftness means +20% to attack speed for both you and your pet. More attack speed for you means more frequent crits and more +50 focus heals to your pet means more often your pet can use its own attacks.

+20% attack speed for your pet means a vicious feedback circle of destruction. With Frenzy, your pet gets an additional +30% buff to attack speed that lasts for 8 seconds after every crit the pet lands. By giving your pet +10% to crit from Ferocity… the faster attacks are much more likely to crit, which procs more faster attacks, which are likely to crit and maintain the maniac attack speed…

To top it all off, Ferocious Inspiration gives your entire party (self and pet included) an additional +3% to damage done for 10 seconds after the pet scores a crit. This is phenomenally better than Trueshot Aura’s +100 AP (~7 DPS), especially when you consider you don’t have to actively cast it, and that it improves damage for casters as well as physical types.

update – Feb 4th, 2007

I was sick most of this weekend, so naturally I had to do something silly when not curled up in bed. That something silly was a respec to the beast mastery build above. I’m lvl 63 at this point, and have only purchased the one point in Serpent’s Swiftness (so am missing the 4 points in swiftness and 3 points in Catlike Reflexes). And… the build is useful.

I feel much more durable in general than the other build (I’ve got about 5000 hp and 50/5 hp regen). However, not having Aimed Shot or Wyvern or Silence is weird… In fact, I don’t have any abilities gained from talents. My personal DPS (ie, that achieved by shooting arrows into things) has decreased by about 20-30 since the rebuild. However, my pet’s DPS has increased by 40-50 points. Plus the pet’s inspiration buff is almost always active… for +3% DPS to the entire party.

The beast build kills slightly more quickly than my “reliable” build. But it feels VERY different, and takes a very different mindset to play effectively. I am also basically guaranteed to die when my pet dies. I’m planning on trying to stick with this build until 66 or 70, depending on my mood. I suspect that the final 4 points in swiftness will make an enormous difference in my attitude, but I’ll have to wait and see.

Not much to say here, really. I just finished my first real voyage in Puzzle Pirates. That is to say, I took a boat out from port, plotted a course, and successfully guided it to the intended destination. I’ve been playing the game off and on for a pretty long time now, and I’ve participated in plenty of pillages. Just… never actually even seen the navigation puzzle, much less fiddled with such things as buying grog and ammo.

See, a week or two ago, Penny decided she wanted to play. I made sure she got on the same ocean as me, but forgot to actually refer her. She wound up starting off in a neighboring archipelago, which means major difficulty for me to get over there to meet up with her. Since then, I’ve been pretty single-minded about managing to get over there and have been playing every night.

Well, I could never find a player ship headed in that direction, so I figured my best option was to try to get my own. So, I did. A bit of doubloon exchange fun, and I wound up with enough cash to buy a ship and enough doubs left over to get my captain’s badge (permission to start my own crew).

Allaryin, Pirate

Unfortunately, to form a crew… one first needs to actually know how to navigate.

This posed a problem, since the only way to get navigation skill is to either convince another crew to let you sail one of their ships around, or to deal with the navy. And the navy has some pretty fierce requirements before they let you practice navigation on one of their ships. The navy’s requirement being… that I need to have at least ‘broad’ experience in the four base pirating games, which I have… almost.

See, the gunnery game hates me. I don’t know what I did to it, but it really really doesn’t like me. So, despite hours of trying to play the stupid game, I consistently perform poorly and never get rank in it.

This evening, after an hour spent washing out cannons, I decided to go on a pillage with some other players. I joined the first ship I saw that looked like it might be heading a direction I was interested in. We chatted while waiting for other people to accept. The next thing I knew, he’d invited me to join his crew and had promoted me to officer. A bit later, nobody else’d shown up, so he bailed.

I traveled across the docks to my own ship and set what I assumed would be the safest course possible, 3 leagues from the island where I’d commissioned the ship in the first place back to my home port. I didn’t want to deal with other players on my first voyage, so I figured out how to call upon the infinite supply of swabbies (npc pirates) to man vital functions while I figured out this whole navigation thing.

One league into the voyage, we got attacked by barbarians. Begin my first attempt at the sea battle game… with empty cannons ;) It was all I could do to quickly board the other ship and just be done with it. I’m not terribly good at the rumble game, and the swabbies apparently aren’t any better. The attackers pillaged 2 cannonballs from my hold. Whee.

One league later, we got attacked by brigands. This time, I’d gone to the trouble of loading three of my sloop’s four cannons. And it paid off, I managed to actually hit the other ship once before boarding. And when it comes to swords… I know that puzzle :P We won handily.

Shortly later, we pulled into port, and I figured out how to divvy up the spoils (between myself and my boat :P ). It was cool.

First Pillage

I know dozens of people have probably already done this, but I’m quite happy with myself for having figured it out in ~5 minutes.

Ever since I migrated my blog over to WordPress, I’ve had a little dropdown box in the right column that contained a list of my post categories. Well, that box never actually did anything. There was no form associated with it and no javascript.

Well, I finally buckled under and figured out the javascript. The code in question to make the category box automatically jump to the desired category search is something like this:

<?php
    dropdown_cats( 1, "All", "name", "asc", 0, 0, 1 );
?>
<script lang='javascript'><!--
	var dropdown = document.getElementById( "cat" );
	function onCatChange() {
		location.href = "/blog/category/"+dropdown.options[dropdown.selectedIndex].innerHTML+"/";
	}
	dropdown.onchange = onCatChange;
--></script>

Of course, if your url scheme is different, you might need to specify something slightly different for the destination. But the point is, this works so far as I’ve tested it, and it was pretty painless to drop into place.

A friend of mine, Peter Harkins, is the maintainer of Sociable, a WordPress plugin that adds magical little links to social bookmarking services at the bottom of every blog post. Well, Sociable 2.0 is in a very stable beta release now, and because I’ve recently upgraded my WordPress install to 2.1, AND because I’ve absolutely never gotten around to installing the plugin… I tested it.

The install took <5 minutes. It was 100% painless.

  1. Download the plugin
  2. Unzip into WP plugins dir
  3. Open WP admin console -> Plugins
  4. Click ‘Activate’ next to Sociable in the list
  5. Go to Options -> Sociable
  6. Set desired preferences
  7. View your blog with cool links at the bottom of posts

Go. Get it now. You know you want to. Your blog will love you for it. :)

So… I live in southern Arizona.

Yesterday, we had snow. It stuck, and schools were canceled, and my sister-in-law was an hour late to work, etc… Good stuff.

Today, not so much. It was cold, my car gave me grief this me grief this morning and I had to scrap off ice again with a tupperware lid (because NOBODY sells ice scrapers in this state), but clear roads and such.

Thankfully, we didn’t get it nearly as bad as our folks did (2 hours east of us). They got six inches yesterday. In a place that tends never to snow. I provide you now a picture, provided me by my little brother, of Dad’s car.

Snow Day

I had hoped to take some pics myself (of orange and palm trees covered in snow, of my own car, etc…), but my cell’s battery had died and I was already running slow enough in the morning that I didn’t want to take the time to find our camera camera.

Several months ago, I wrote a very simple Flash slideshow application for work. Shortly after that, I took some of my free time and built a similar application from the ground up. This time, I got to choose my own spec ;) I’d always promised that I’d release the thing to the public, and last night, Peter asked for the source. Embarrassment ensued when I realized that I’d never gotten around to making that public release. Well… that changes now.

The whole application is about 130 lines of code plus Joey Lott’s ascb.util.Proxy class. I did this all back in AS2. When AS3 came along, I decided that I’d eventually rewrite the slideshow again and release it along with full source (GPL or similar). Haven’t had a chance to do the AS3 rewrite yet (even though I have written a different slideshow in AS3 since then… :P ). Until the time comes for the AS3 rewrite, I’ll keep my ugly code to myself.

To view the slideshow in action, go here.

license issues

Obligatory disclaimer goes here. I’m not responsible if using this component causes your children to hate you, your dog to die, your house to burn down, or your hair to fall out. Or anything else for that matter. You have been warned.

I’m not releasing the source right now because I don’t feel like cleaning it up. Feel free to try to decompile the SWF if you really want to, but I’m warning you, it’s really probably a waste of time.

Please download the SWF to your own host and use it from there in stead of loading it from my machine. It’ll work better for everyone involved that way.

Otherwise, feel free to use the slideshow however you want. I’d appreciate a credit for it, but otherwise am not picky.

features

The slideshow will work on any computer with Flash 8 or newer installed. As of Sept of 2006, the numbers say that about 90% of net connected computers in the US, Europe, and Japan meet the requirement.

The application loads images externally. This means that the entire SWF is able to weigh in at under 4kb. The images you’re going to be rendering will likely be significantly larger than that. The slideshow begins once the second image is loaded, so even on slower connections, things will start rolling w/o a need to pre-load every image. If an image isn’t done downloading by the time the slideshow reaches it, it’ll just loop back to the beginning.

You can customize the delay between images in the HTML/Javascript you use to load the SWF. There are no fancy transitions to worry about choosing between and configuring, the images just cross-fade.

You can specify your list of images either via an external XML file or by embedding it in the HTML of the page itself (and using some Javascript magic that I’ll explain later).

instructions

First off, I have to make the disclaimer that I am a firm believer in FlashSWFObject. I will assume for now that you’re using it too if you have the chance. I’ll think about trying to explain how to make things work in MySpace and other crippled environments later (like not today).

  1. Make sure you have a modern version of SWFObject and the slideshow component.
  2. Build a list of the images you want to display.
  3. Put everything on the server.
  4. Mix it all together.
  5. Point people at your slideshow.

getting your stuff together

At the time of this writing, Geoff hasn’t made a SWFObject release in a while, but any time you’re planning on using it, it’s always worth looking to see if he’s somehow streamlined/upgraded the script since the last time. Download SWFObject.

I’m not planning on making any improvements to this version of my slideshow, so there isn’t any reason to check for updates from me. Download Slideshow. Unzip it. Yes, I realize that by zipping this file I have made it larger. I zip it in order to make downloading the file easier.

It’s generally recommended that you crop all of your images down to the same size. The slideshow just aligns everything to the top left corner of the SWF. So large images will be cropped and small images won’t fill the whole area.

Upload everything to the server. For my demo, I copied everything into a /slideshow folder and put the pictures in /slideshow/images.

write your image list

Whether you’re using an external image list (an XML file), or you want to embed the image list into your HTML and extract it with Javascript, you need to come up with a list of the images in question and the order in which they’re to be loaded. The format for an external file looks like this:

<images>
	<img src="path/picture.jpg"/>
	<img src="path/another-picture.jpg"/>
	<img src="maybe-some/other-path/picture.jpg"/>
	<img src="http://example.com/path/a-remote-picture.jpg"/>
</images>

Painless enough, right? You can use relative paths (relative to wherever the SWF resides) or absolute URL’s, just as if they were image links in an HTML document. Now upload the XML file to somewhere that your SWF can see it (ideally on the same server, probably in the same directory). I put mine at /slideshow/images.xml in the example.

write your html

To put it all together, you want your html to look something like this:

<script type="text/javascript" src="swfobject.js"></script>

<!-- All of this section will be replaced by the flash movie, but this content
     is important for search engines and is also used to configure the flash -->
<div id="slideshow">
	Oh noes! You don't have flash! You should click <a href='http://www.adobe.com/go/getflashplayer'>here</a> and upgrade.
</div>
<!-- end: replaced section -->

<script type="text/javascript"><!--
	var div_id = "slideshow";		// id of the div tag above
	var ss_width = 320;			// desired width of slideshow in pixels
	var ss_height = 240;			// height of slideshow
	var ss_delay = 5;			// seconds to wait between images
	var ss_images = "images.xml";	// url of the image list
	// you prolly don't have to mess with much below here
	var so = new SWFObject( "slideshow.swf", "slideshow", ss_width, ss_height, 8, "#999999" );
	so.addParam("wmode", "transparent");
	so.addVariable( "imageURL", ss_images );
	so.addVariable( "delay", ss_delay );
	so.write( div_id );
--></script>

Ok, that’s not the entire file, those are just the relevant bits. This is also not a SWFObject tutorial, so I won’t explain exactly what’s going on here. The important things to look at are the config variables at the beginning of the javascript block, which should be self explanatory. Load up the HTML file and if you did everything right, it should work quite happily.

extra credit – embedded image list

The data format for the image list is essentially identical if you’re embedding the list in your HTML, except you swap the images tag out for a div with an id (for html validity reasons, really):

<div id="slideshow">
	<img src="one.jpg"/>
	<img src="a-path/two.jpg"/>
</div>

This can go anywhere in the SWF, as long as it’s before the script tag where you do your SWFObject magic. Ideally, you’re just re-using the div that SWFObject is going to replace.

Then, you need to do some slightly different javascript when loading SWFObject. I did something more like this:

var div_id = "slideshow";	// id of the div tag above
var ss_width = 320;			// desired width of slideshow in pixels
var ss_height = 240;		// height of slideshow
var ss_delay = 5;			// seconds to wait between images
// magic happens below
var min_version = 8;
var so = new SWFObject( "slideshow.swf", "slideshow", ss_width, ss_height, min_version, "#999999" );
var div = document.getElementById( div_id );
// detect flash
if( deconcept.SWFObjectUtil.getPlayerVersion().major >= min_version ) {
	// we're good, render the swf
	var xml = "<images>"+div.innerHTML+"</images>";
	xml = xml.replace(/\"\>/g,'"/>');	// keep browser from stripping closing /'s
	var clean = escape(xml);
	so.addParam("wmode", "transparent");
	so.addVariable( "images", clean );
	so.addVariable( "delay", ss_delay );
	so.write( div_id );
} else {
	// we're lacking sufficient flash, point to solution
	div.innerHTML =
		"<div class='errorBox'>"+
			"It looks like you don't have a current version of Flash installed."+
			"Please click <a href='http://www.adobe.com/go/getflashplayer'>here</a> to upgrade."+
		"</div>";
}

Again, I won’t explain exactly what’s going on here, but for those programmers out there, it should be pretty obvious. The one major difference between this embedded approach and the external one is that we’re using the slideshow div to hold the image list and are handling our error message manually.

Why go through the hassle to embed your image list? Well, it’s a tough call. But this way does load faster, especially if your server gets caught up trying to deliver the external XML file.

caveat – crossdomain security

I don’t really want to go into this whole issue, but should probably warn you about it. As of Flash 7, security improvements in the player make it a hassle to load files (images, xml, etc…) from remote servers. By remote, I mean somewhere other than wherever the SWF was loaded from. For more information on how to deal with this problem, take a look at Macrodobe’s tech note on the subject.