Simulate a battle between two creatures Welcome, brave code golfer! Today you will stand in the midst of a great battle between a goblin and an elf!

    goblin attacks elf!
    elf dodges!
    elf attacks goblin!
    elf hits goblin for 13 damage!
    goblin has 37 health left.
    goblin attacks elf!
    goblin hits elf for 1 damage!
    elf has 49 health left.
    elf attacks goblin!
    elf hits goblin for 19 damage!
    goblin has 18 health left.
    goblin attacks elf!
    goblin hits elf for 26 damage!
    elf has 23 health left.
    elf attacks goblin!
    elf hits goblin for 20 damage!
    goblin has been slain!


The Challenge

Your challenge is to simulate a battle, like the above one. You will recieve input in this form:

creatureName health strength defense accuracy agility


For example, the battle between the goblin and elf would be:

goblin 50 40 35 3 2 elf 50 35 30 4 5


The first and second creatures will alternate attacks.


Print 'creatureName attacks otherCreatureName!'
Check to see if the creature dodges. The creature will dodge an attack if (its agility times rand() divided by 2) is greater than (the attacker's accuracy times rand()).

If the creature dodges, print 'creatureName dodges!'
Otherwise, calculate the damage dealt by subtracting (the attacker's strength times rand()) and (the defender's defense times rand() divided by 2). Minimum damage is 1. Print 'creatureName hits otherCreatureName for (x) damage!' Then print 'creatureName has (x) health left.' unless the creature's health is 0 or less, in which case...

If the creature's health is 0 or less, print 'creatureName has been slain!' and end the program.




Rules


Shortest code wins.
Don't literally print 'creatureName,' but replace it with the creature's name. Don't print '(x) damage' or '(x) health;' replace them with the actual amount. (I have to specify this because some people are very creative with bending the rules. :P)
Perl, 254 + 1

for((@a[0..5],@b)=split;$a[1]&gt;0;@c=@a,@a=@b,@b=@c){say"$a[0] attacks $b[0]!\n",rand$b[5]/2&lt;rand$a[4]?do{($==rand($a[2])-rand$b[3]/2)&lt;1and$==1;"$a[0] hits $b[0] for $= damage!\n$b[0] has ",($b[1]-=$=)&gt;0?"$b[1] health left.":"been slain!"}:"$b[0] dodges!"}


Run with perl -nM5.010 (or perl -nE '&lt;code&gt;').  Per meta, the -n switch counts as one extra character.
No fancy golfing tricks in this code, except maybe the use of $= as the damage variable to save an int.

Edit: Hopefully, the damage calculation is correct now.