Monday, January 26, 2009

Java: CharSi Update #17

Up to this point I have been ignoring any bonuses by having multiple pieces of a set equipped. Now that all equipment mods are stored and displayed correctly it is time to take these bonuses into account. I couldn't decide where to put the variables and methods needed to calculate what bonuses apply. So I created a whole new class file to hold these methods. The methods never get called inside this class file, only in the Stats and Character class files.

Each set evaluated in its own method, even though they are all called at the same time. The first thing to do is to determine how many set pieces are currently on the virtual character. Then the bonuses are applied depending on how many pieces are equipped and which ones they are.

static public void BerserkersCheck() {

for(int i = 0; i <>
berserkersArsenal[i] = 0;
berserkers = 0;

if(helm.compareTo(BERSERKERSHEAD) == 0) //detemrine which items are equipped
berserkersArsenal[0] = 1;
if(armor.compareTo(BERSERKERSHAU) == 0)
berserkersArsenal[1] = 1;
if(weaponOne.compareTo(BERSERKERSHAT) == 0)
berserkersArsenal[2] = 1;

berserkers = berserkersArsenal[0] + berserkersArsenal[1] + berserkersArsenal[2];

if(berserkers == 3){ //full set
charLevelMods[6] = charLevelMods[6] + 8;
charLevelDefOn[1] = charLevelDefOn[1] + 3;
eDmgOn = eDmgOn + 50;
stats[4] = stats[4] + 100;
specialMods[6] = specialMods[6] + 75;
modsOfNote[8] = modsOfNote[8] + 75;
poisonDamage[0] = poisonDamage[0] + 5;
poisonDamage[1] = poisonDamage[1] + 9;
itemStats[31] = itemStats[31] + 3;
}
if(berserkers == 2){
if(berserkersArsenal[0] == 1) //helm equipped
charLevelMods[6] = charLevelMods[6] + 8;
if(berserkersArsenal[1] == 1) //armor equipped
charLevelDefOn[1] = charLevelDefOn[1] + 3;
if(berserkersArsenal[2] == 1) //weapon equipped
eDmgOn = eDmgOn + 50;
stats[4] = stats[4] + 50;
}
}//end

First it is determined how many set pieces are equipped. Once that is determined each specific item is checked, if it is present the bonuses are added, if it isn't the item is skipped and the next item is checked. The arrays that contain the bonus information are then added along with the equipment arrays when everything is summed in the Stats class. This method is repeated for each of the other 31 sets. Most are a bit more complex, especially those that have more than three pieces to the set.

This ends the coding portion up to this point. Characters can be created, skills assigned, equipment worn and all of the bonuses and stats displayed appropriately. Now I need to run some checks to ensure everything really is displaying and no mods were left out. I checked everything as I added it to the program, but I'm sure some bugs slipped through. Case in point when putting this in I found out that the Barbarian mastery skill bonuses weren't being added to the displayed damage and attack rating values. So my next step is to create several text characters and see if their stats match up with what I am expecting.

Tuesday, January 20, 2009

Java: CharSi Update #16

Quite a lot of information has been gathered up to this point, from the equipment used to the mods the skills provide. However much of this information isn't displayed accurately, or at all, in the Stats panel. Now that is no longer the case. Every mod is now summed and displayed as accurately as I can in the Stats panel, from IAS provided by Fanaticism to the Attack Rating bonus from the Blessed Aim aura. Along with that the Skills panel now displays the elemental damage done while taking into account any bonuses provided by the equipment to increase this type of damage. This means if the virtual character is wearing Trang's gloves, then the poison damage done by the character's skills are increased accordingly.

However that is not all that was accomplished with this update. Quite a few minor points and details were addressed as well, including:
  • Add per level mods to Stats panel displayed values
  • Add elemental damage from equipment to Stats panel displayed values
  • Add skill bonuses to Stats panel displayed values
  • Correct poison damage calculation
  • Add ability to select active aura in Stats panel and add bonuses accordingly
  • Add ability to select attack type in Stats panel and add bonuses accordingly
  • Add hidden bonuses from Fade, Blessed Aim and Resist element auras
  • Set resistance values in Stats panel to no longer display a value higher than what is possible
  • Correct Enchant damage to take into account ranged weapons
  • Add display field for off weapon Increased Attack Speed

I think I caught all of the bugs I could find, but more testing will be needed to ensure that is the case. Now with these updates a character can be fully equipped with Set/Unique/White items, assigned skill points and see them accurately displayed in the Stats panel.


Most of the GUI changes were made in the damage sub-panel. Specifically I removed the assassin kick and paladin smite damage fields and instead Incorporated them into the primary weapon display field. I needed the space as I then had to include a few more JComboBoxes for prebuff skills as well as possible aura selections. Each of these JComboBoxes will be populated with options as those skills are assigned points in the Skills panel.

I believe I have the damage calculation correct. There are exceptions for several of the skills, such as Vengeance, Enchant, Smite, assassin kick skills, Berserk and so forth. As a result that particular method is quite confusing and unless someone points a bug out to me I'll have a devil of a time correcting any problems.

However to avoid some possible problems I did decide that only the physical attacks will be displayed in the Stats panel. If an elemental attack such as Firewall needs to be seen then the user can simply go to the Skills panel an view the values there. It would be a duplication of effort to have them displayed in the Skills panel, besides which would also require quite a few more exceptions as many sources of damage wouldn't be counted then. The only exception to this is Blessed Hammer. Seeing as Hammerdins are a very popular build and Blessed Hammer is given a bonus by Concentration the only way to display the values correctly was in the Stats panel, even though this is a caster skill.

Overall I think it is coming along quite nicely. I'm sure a minor bug or two will pop up and need fixing, although I think I caught most of them already. The GUI itself should be set, so this leaves me with only needing to take into account Set item bonuses to be done with the current panels.

Friday, January 16, 2009

Diablo II: MFO #3

The Magic Find Olympics (MFO) is a contest run twice a year on the Single Player Diablo II forum. The basic premise is that each contestant picks something to run: Baal, Mephisto, Level 85 areas or Super Uniques. Then everyone has nine days to run those areas as much as possible, the person with the best items found wins their respective section and can then take a few items from the losers.

Last time I ran Pindleskin (SU category) and had a dismal showing for the time invested. Granted I didn't go all out but only ran as much as I felt like without making it a burden, so those with more dedication blew me away. The returns from Pindleskin are based purely on luck, and with him as a target luck has been hard to come by for me. So this time around I'm going back to Mephisto. I had originally thought about participating in the Level 85 area category but my Fishymancer simply can't compete with the other players running the Ancient Tunnels and Pits at extreme speed. I'd like to have some sort of chance, no matter how small, of placing in the top three. Therefore Mephisto it is.

Again Malice my main magic finder is my runner of choice. She's level 93 now (barely) and only gets used for magic finding purposes, therefore only in tournaments like this. I had to rearrange her inventory and equipment a bit as her last target was Pindleskin and the Harmony bow she had on switch wasn't going to be useful. That and I didn't need quite so many resistance charms since fire damage wasn't something I needed to worry about. This freed up a 4x6 area in her inventory to pick up items, meaning she wouldn't have to stop off at Cain every run to identify her loot.

Sign-up Thread
Progress Thread
Results Thread

Malice's runs followed a nice progression, slightly different from before based on some tips I've picked up. She starts in Act IV and uses Telekinesis on the WP to activate it. She does have to take a step to the side first as otherwise the spell fails. From there she teleports to Mephisto and uses Static Field to reduce his life to one half. She then steps backwards a bit to let the mercenary tank while she fires meteors and fireballs at him. Four meteors and about 12-15 fireballs later Mephisto is dead and I can review the dropped prizes. Then she teleports to the portal and uses it to enter Act IV again.

On average the mercenary requires 2-4 health potions per run to stay alive and Malice has to teleport him away on a regular basis in the vain attempt to keep him vertical. Even with all that he does have to be resurrected once every twenty runs or so. This is because he is wearing the wrong equipment, which I found out after the MFO was over. He has an Insight Cryptic Axe, Shaftstop and a Tal's helm. Instead he should be wearing the Shaftstop, a Rockstopper and Keplie Snare and then wouldn't require any health potions at all. Malice does lose the Meditation aura from the Insight so she'll have to drink a mana potion each run, but it does make things much easier with the alternative setup.

Malice made a total of 4534 Mephisto runs over the nine day tournament. In all this took 49 hours, 13 minutes and 19 seconds and netted her 421 total qualifiers. This came out to 10.8 runs per qualifier, which is right in line for the average I received last time running Mephisto. The 39 seconds per run however is much lower than that from last time, and I doubt I could get much lower without switching to a pure Blizzard sorceress instead of Malice. The number of runs however is over double what I performed last time, and it showed. I ended up coming in second place overall, even though I was last with only two days to go. Found four of the top five items on the very last day, which I spend all day running Mephisto with breaks here and there for sanity's sake.

Qualifiers:
Immortal Kings Stone Crusher - 33
Dagoons Teaching - 15
Laying of Hands - 20
Dark Adherent - 19
Ariocs Needle - 11
Wizardspike - 12
Bonehew - 8
Ethereal Edge - 14
Windhammer - 13
Gimmershred - 11
Demon Limb - 11
Jade Talon - 11
Djinn Slayer - 7
Bloodmoon - 8
Natalyas Shadow - 11
Credendum - 10
Nords Tenderizer - 7
Razors Edge - 10
Ormus Robes - 6
Sandstorm Trek - 12
Baranars Star - 6
Rune Master - 7
Demons Arch - 11
Flamebellow - 5
The Reapers Toll - 8
Harlequin Crest - 9
Shadow Killer - 10
Thunderstroke - 3
Eschutas Temper - 4
Hellslayer - 6
Lightsabre - 7
Viperfork - 3
Hellrack - 3
Arachnid Mesh - 5
Blackoak Shield - 5
Draculs Grasp - 4
The Gladiators Bane - 5
Marrowwalk - 3
Stormshield - 2
Stoneraven - 8
Najs Puzzler - 6
Blood Ravens Charge - 3
Nosferatus Coil - 3
Spike Thorn - 2
Steel Shade - 4
Soul Drainer - 10
Wolfhowl - 2
Andariels Visage - 2
Verdungos Hearty Cord - 3
Heavens Light - 2
The Redeemer - 3
Cerebus Bite - 1
Alma Negra - 5
Ondals Wisdom - 1
Demonhorns Edge - 5
Sazabis Ghost Liberator - 1
Azurewrath - 1
Doombringer - 1
Arkaines Valor - 1
Head Hunters Glory - 1

The prize of my loot is the Azurewrath, an item I've been searching a long time for. It is one of those items I keep seeing everyone else finding and yet I'm simply not able to. It's also the reason I ran Mephisto really, as he can drop it but Pindleskin can't. Just behind the Azurewrath was my next prized possession, a Tal's amulet. That completes the set for me as I found the armors last MFO running Pindleskin. Of course now I have to figure a build to make, but I have time for that. Beyond that I found enough class specific items (HoZ, Titans, Bactucs, Jalal's Mane) to keep any characters outfitted for a very long time.

Overall I am very pleased with this MFO. I didn't lose any items since I came in second and the top finisher plays Hardcore and therefore can't use my Softcore items. I also didn't take any items from people below me as I am self-found and intend to stay that way. The next MFO isn't for another six months so no idea which category I'd run that time around, assuming I have time to participate at all. Time will tell.

Monday, January 12, 2009

Diablo II: The Twelve Days of Christmas

In the Twelve Days of Christmas tournament by Maxicek contestants are given a set of tasks and must complete each one. It is different from other tournaments in that the tasks are completed with already completed characters, you don't need to create one from scratch to compete. The tasks ranged from find a specific number of a type of item to locating a monster with a certain combination of mods to gathering a specific number of one type of monster on the screen at once. Points are awarded depending on what difficulty it was completed in as well as the type of monsters involved (unique, champion, normal).

Personally I joined knowing I wouldn't be winning this one. My goal was to complete all of the tasks, to which I was almost successful. The one task I failed in was finding a Blood Hawk bosspack, which no one else completed either so I don't feel too bad about that part. Overall it was a lot of fun, and since I didn't lose items (as in the MF tournaments) it was a successful tournament. I was able to complete a lot of the tasks simply by leveling two different characters through the entire game. The rest was completed with a few runs of bosses or different areas. Not sure if I'll do it again next year, it will completely depend on what else is going on at the time.

Wednesday, January 7, 2009

Java: CharSi Update #15

Not done by any stretch of the imagination, but enough was completed to warrant an update. First thing on the agenda was to alter the GUI component so that it could better display the needed information. First off I removed the damage/AR to demons and undead components. While I still intend to provide that information, I think I'll do it as a ToolTip rather than in the GUI component itself, since that information is a tad less important.

In its place I've included damage and attack rating fields for the off-hand weapon, assassin kicking, paladin smiting and throwing of the primary weapon. So now that they are present, I have to determine how to populate data into each of these components. First step was to create a int array to hold the attack rating information. Then I needed the equation that determines what the true attack rating should be. This I found on the Amazon Basin when I was browsing it as the DIII forums were down for "maintenance". I created a method that would combine all of the mods associated with attack rating into one equation and then populate the attack rating int array appropriately. Adding the necessary JTextField.setText calls for the attack rating fields in the overall SetAll method means whenever anything is changed, these values will be updated.

Doing the same for the damage fields fell along the same lines, but there were quite a few more pieces to work together. First off the necessary equations were found in the Strategy Compendium. All of the needed mods were already summed up under other methods in the Stats class, so I simply plugged them into the equation inside of a new method and called this method when the SetAll method is run. Granted there were a few pieces that needed extra attention before this could be considered a success.

First I had to decide how to handle the StatsBonus variable. Each of the item descriptions contains the base item as its second line, all except the white items that is. So once I added this descriptor to all the white item text files I was able to save this information into its own variable. This variable was then compared to an array of Strings to determine if the chosen item falls into any of the special categories.

String[] hammers = {WARHAM, MAUL, GREATMAUL, BATHAM, WARCLUB, MARTEL, LEGMALL, OGREMAUL, THUMAUL};

for(int i = 0; i <>
if(hammers[i].compareTo(base) == 0){
hammer = true;
break;
}
}

If there is a match then a boolean variable is set to true, for use later.

if(hammer)
statBonus = (float)(1.10*(baseStats[0] + stats[0] + userStats[0]))/100;

With that variable determined I now only have the Modifier variable to deal with. This one is modified depending on what type of skill is being used. As a result I'm leaving this one until later as I have quite a few other pieces that need to be connected between the Skills class and Stats class that I'd like to handle all at once. However the damage panel does display a Normal attack without difficulties now.

Last but not least I did create the necessary methods to sum the +skill mods from the equipment worn by the virtual character. This information is then transferred over to the appropriate Skills sub class so that now the Skill Calculator can display values greater than level 20. It now accurately shows what level the character's skills will be at for the equipment worn.

However I'm not done yet. There is quite a bit of information that still needs to be attached between the Skills, Stats and Equipment classes. For example the auras used by the Paladin aren't considered for defense, attack speed, resistance or anything similar in the Stats panel. Correspondingly the mods given by equipment for +elemental damage aren't considered in the Skills panel information. So the next step is to finish attaching all of the different pieces behind the scenes until I have accounted for everything possible in all three JPanels.

Wednesday, December 31, 2008

Java: CharSi Update #14

Any mods provided by equipment is now properly displayed in the Stats panel, minus damage and attack rating calculations. The first step was to add a method for each category of mod that would sum the data from each of the equipment subpanels into a single value. I split up the mods into small groups to make things a bit easier, such as all boolean values in one method, all mods of note in another and so forth. During the calculations the mods that are based on character level had to be taken into account as well. This was done with a simple addition to the currently summed value.

((int)charLevelMods[15])*(levelCBox.getSelectedIndex()+1)

Once the summing was completed it was a simple matter of creating another method to populate all of the JTextFields and JTextAreas. To do this a couple of different methods were created to populate patches of these components, then a single method is made that calls all of the methods together, both the summing and populating ones. I determined it was easier just to sum everything each time a value is changed rather than only the ones affected, to ensure that I didn't miss something along the way.

The miscMods panel had a few different wrinkles beyond the others. Specifically the text files that contain the random mod information for each piece of equipment needed to be dealt with for when the program is closed or the item added/removed. Adding the information wasn't too difficult, however a new method needed to be created to erase all of the file's content when the item was removed or the program closed. This new method basically overwrote the current file with a blank one and is called every time just before an item is added or whenever one is removed, as well as when the miscMod Panel is initialized for cases when the program is closed with equipment still assigned to the virtual character.

Once that was done it was a simple matter of taking every mod that isn't deal with in any of the other panels and appending that mod's information to a StringBuffer that is then displayed in the miscMod JTextArea.

Now with all of the other Panels completed it is time to work on the Damage panel. This one will take a little research first as I need to get the correct damage equation to ensure I don't repeat the mistakes of the current LCS. That and I know I need to alter the current component's GUI quite a bit to take into account kick, smite, one-handed and throw damage as well as active auras for Paladins. Once that is completed there are only a few cleanup items to take care of before the current iteration of the program is complete. Then I'll have to decide what the next step will be.

Monday, December 22, 2008

Diablo II: Patriarch Hades

Hades will be a Fishymancer, basically a character that summons skeleton minions to do the fighting for him and backs them up with curses and Corpse Explosion. I've already completed one such character, but he was in Hardcore from the No Vitality tournament and therefore not someone I intend to play again. The point of this character is to have someone in the end who can magic find in Level 85 areas quite easily.

At first I thought I'd enter the current MFO with him, but since there is no way I could compete with everyone else in that category, my runs are far too long, I decided to forgo that idea. Still, I decided to make this a purely twinkled character, which is very different from what I normally do. The point was that Fishymancers can slow down a bit and I didn't want that as I've already played this character before. Secondly I'm curious how long it would take me to play a twinkled character through the game, as I haven't done that in years. And so Hades was born.

Hades started off twinkled with the Infernal set, giving him some nice +skill mods early on. He also started off as a melee character, right there on the front lines with his minions whacking away at monsters. This worked quite well as Hades could concentrate on the Devilkin shaman while his minions kept their minions at bay. As he progressed through the first Act I continued to twinkle on gear, such as the Tarnhelm and a pair of Nagelrings. I wanted him to be magic finding as much as possible as early as possible, as well as getting as many +skills as I could.

Once in Act II Hades decided to forgo getting a Desert Warrior mercenary and instead stayed with the Rogue. He already had eight melee minions at that point, so didn't need another one. Besides which, none of the available auras would help out his army much, but a powerful ranged attacker would be very useful in places like the Maggot Lair and Arcane Sanctuary. And boy wasn't she helpful there, those areas went by quite quickly, although it helps when you drop the player settings down to P1 too.

Hades wasn't in any sort of danger through Normal, not from the monster packs nor the Act bosses. Diablo did catch him with the edge of one of his lightning hoses and dropped his life down to one third, but that was about as close as things came. By the time Hades completed Act IV, he had ten skeleton warriors, four mages, a clay golem and his rogue mercenary companion beside him. Backed up by Amplify Damage they were quite the wrecking crew. At this point Hades is wearing quite a bit of magic find; two Nagelrings, Chance Guards, Tarnhelm and a Goldwrap belt. Still, he hasn't found much of anything, but I do expect this will help him complete some of the tasks in the Christmas tournament.

The army size stayed the same all through Act V as well, as I didn't mule on anything else. Mainly because I was playing the entire act through in one sitting and didn't feel like stopping to mule more on, as well as the fact nothing was really needed at that point. Hades breezed through the rest of Normal and took out Baal with zero difficulty. A clay golem plus Decrepify means no Baal clone, no teleporting and no froze wave. Just sit back and cast Decrepify every 8.2 seconds until Baal fell.

Nightmare was pretty much a continuation of the end of Normal. However things did start to slow down a bit in the Catacombs as monster's hit points increased. Still, they all fell without too much trouble and this lead the way to Act II. Here is where Hades parted with his Rogue companion and sent her back home to help her sisters. He replaced her with a Might Desert warrior, the aura is simply too enticing for this particular build to go with anyone else. Coupled that with the Insight Partizan I muled onto him and we're set to go. Along with the Insight I muled on a Arm of King Leoric. This will allow Hades to have a full dozen skeleton warriors and a half dozen mages. However there is a catch, the item has a chance to cast Bone Prison when Hades is hit. I'll just have to ensure he's never in melee range of any monsters.

Hades continues to progress nicely, things really did pick back up again once I switched mercenaries. He definitely isn't a fan of tight spaces, but in wide open areas he is king. At the moment not spending my extra skill points, as I'm not sure where to put them. I was thinking CE but that only increases the mana required and at P8 it isn't very useful. The other option was Skeletal Mage but they aren't the most useful and I have twenty minions right now. At the moment I think I'll just hang onto them. I do want to enter Hell with CE maxed so will store the points until I can ensure that happens, then the rest go into Skeletal Mage.

AoKLR is as dangerous as they say. Got stuck with a Fallen when attempting to raise an army. Thankfully it was a Fallen and could beat it away with the wand. Still, almost got stuck with a few Dolls in Act III, which wouldn't have been so much fun. The Durance was a bit tricky, as every doorway held the potential for disaster if Hades were trapped in a Bonewall prison. Still, he made it through and eliminated Mephisto without much trouble.

Hades cruised through the rest of the difficulty without only one snag. In the Ancients Way he encountered the undead that keep rising after they are defeated. Thinking nothing of this Hades continued through the area staying behind his troops and out of danger. All of a sudden one of the monsters raised from the dead behind him and charged. Hades died in a single hit. After that he learned to explode every corpse as he went to ensure that didn't happen again. Hades had to do a few Baal Minion runs to get his level to the norm for going into Hell, 75. Then he was able to twinkle on the rest of his equipment.

After that he had a decision to make, what to do with 310 unused stat points and 25 skill points. Decided on dropping the strength charms and being able to wear all of the equipment outright, as well as dumping enough points into dexterity for maximum block. After that was done he increased Raise Skeletal Mage until ten could be summoned and then dropped the remaining 17 skill points into Corpse Explosion. CE will be maxed, followed by Raise Skeletal Mage and that will finish the build.

Hades made full use of his skillset in Hell. The army he would normally quest with was his desert warrior Might mercenary, a clay golem, 13 skeleton warriors, 12 skeleton mages and up to 11 revives. Obviously as long as Hades CEed every corpse that could be resurrected he was in no real danger himself, other than those monsters with piercing attack like Gloams and Slingers. And so Hades did either CE or revive every monster encountered. I found that my favorite revives were either the Rogues (of any type), Frenzytaurs, Snakes or Witches. All of them are fast, tank well and deal decent amounts of damage. On the flip side they do still look somewhat like their still-monster counterparts and I got confused may times thinking a pack had snuck up me somehow.

Progress through Hell went much, much faster than Nightmare. Of course Corpse Explosion was the main reason for that. It was used liberally and Hades practically ran though the entire difficulty. He did get caught up in the Arcane Sanctuary with all those Ghost packs. Being mostly physically immune they took quite a while for 1-2 skeleton warriors to take down. Oddly enough the Maggot Lair didn't have the same problem, as the lightning Beetles aren't PI and therefore a single skeleton kills one in only 2-3 swings.

Hades had a few close calls when Gloams appeared, and they appeared everywhere they could except the World Stone Keep. He did have only 60 lightning resist until the middle of Act V, which probably accounted for some tense moments. However I decided resurrecting monsters that give me a tough time isn't the best of ideas. With an army of 38 running around, keeping track of which lightning blast is from a minion Gloam and which is from a monster one is practically impossible. As a result I found myself dodging my own attacks until I simply stopped resurrecting Gloams and such. Oddly enough I didn't have the same issue with the Witches, which is why I'm willing to resurrect them.

Overall the act bosses were a joke. Decrepify and Clay Golem keep them pretty much immobilized and they all went down easily. Baal did clone himself immediately and as a result I had to take on both at the same time. Since one wasn't engaging a clay golem that one was able to use Baal's normal attacks, although teleporting didn't appear to be possible.

Decided this build is pretty much complete. I wouldn't know what to do with any more skill points, but I'm sure a few levels wouldn't hurt the minions at all. Since he is geared towards level 85 areas I still have to decide if the Skin of the Vipermaji or Skulder's Ire is the armor of choice. Will have to play around with it to see how low I can get my resistances and still feel comfortable with it. Either way if I'm going to the WSK then all I have to do is what I did this time around. Wander through with 11 Frenzytaur revives and absolutely nothing will give me problems, even Listers group went down extremely fast.

Stats:
Level 83
Strength - 95(105)
Dexterity - 180(184)
Vitality - 205(215)
Energy - 25(51)

Life - 608(628)
Mana - 351(361)

Lightning Resistance - 75
Fire Resistance - 74
Cold Resistance - 70
Poison Resistance - 74

Skills:
Decrepify - 1(9)
Dim Vision - 1(9)
Bone Armor - 1(8)
Corpse Explosion - 20(27)
Raise Skeleton - 20(33)
Skeleton Mastery - 20(33)
Summon Resist - 1(11)
Raise Skeletal Mage - 20(32)
Revive - 1(11)
Fire Golem - 1(11)

Equipment:
Weapon: Arm of King Leoric
Armor: Skin of the Viper Magi
Boots: War Traveler
Belt: Goldwrap
Gloves: Chance Guards
Helm: Tiara - +2 Necro skills, LR 29%, Teleport charges
Shield: Homunculus (socketed: Pdiamond)
Ring1: Nagelring
Ring2: Nagelring
Amulet: +3 Summoning skills

Mercenary (Might Desert Warrior)
Helm: Tal Rashas Horadric Crest
Armor: Duriel's Shell
Weapon: Partizan 'Insight'

Hellforge:
NM - Lem
Hell - Ko