Thursday, July 26, 2007

Diablo II: Meteorb Skill Layout

This should have been posted when Malice became a Matriarch, but better late than never. Guides on how to build a Meteorb in Diablo II have been done and redone to death, however this is an explanation on how I built my current magic finder and how she is used.

The skill setup is very traditional:

Frozen Orb - 20
Meteor - 20
Fireball - 20
Fire Mastery - 20
Static Field - 1
Teleport - 1
Warmth - 1
Cold Mastery - 1+

However I like to provide a breakdown of when the points were allocated:

Warmth - 1
Firebolt - 1
Static Field - 1
Fireball - 1

This will bring us to character level 12. Static Field is used only on unique boss monsters while Fireball has become the main skill, replacing Firebolt. From here onward we'll be trying to max out Fireball to level 18, which bring us to character level 29 with some points saved up to obtain Frozen Orb.

Fireball - 19
Fire Mastery - 1
Ice Bolt - 1
Ice Blast - 1
Frost Nova - 1
Glacial Spike - 1
Blizzard - 1
Frozen Orb - 1
Cold Mastery - 1

At character level 30 Frozen Orb becomes the main skill with Fireball as a backup for Act bosses.

Frozen Orb - 2
Fireball - 20

Fireball is now maxed, time for Frozen Orb now.

Frozen Orb - 20
Telekinesis - 1
Teleport - 1

This brings us to character level 49, still in Act I of Nightmare. At this point everything becomes rather simple. Spam Frozen Orb until all monsters are dead since there aren't any immunes yet. Act bosses should still be weakened with Static Field before finishing them off with Frozen Orb.

Inferno - 1
Blaze - 1
Firewall - 1
Meteor - 20

At character level 68 Meteor has been introduced to the character's arsenal. It's uses are rather limited in Nightmare due to Frozen Orb's power, but it will come into play later on in Hell. It does however synergize with Fireball nicely to add some punch to that spell.

Fire Mastery - 20

This is basically all that is left to max until the character has completed questing, at level 83. From this point onward Cold Mastery is what should be maximized to increase the killing power of Frozen Orb for general magic finding purposes.

In Hell Fireball replaced Frozen Orb as the main killing spell. However Frozen Orb is used to chill/slow the monsters before Fireball is spammed to finish them off. For normal monsters Meteor is only used for stationary(ish) targets, such as those the mercenary is tanking or Unravellers.

Act bosses are dealt with fairly simply. First use a Frozen Orb to chill them and their minions, then Static Field to cut their health in half. Then hit them with Meteors and Fireballs until finished off. Since Meteor is a timed spell normally 2-3 Fireballs can be launched in between Meteor casts.

Any area or boss can be run with this build, even the Countess due to her cold/fire dual immunity as long as a powerful mercenary is present. She's especially good at Andariel, Mephisto and Pindleskin runs. Since these are the main boss runs for magic finding, equipping any future characters is a simple matter.

Tuesday, July 24, 2007

Java: En Guard Update #3

A bug came up recently in the En Guard program that allowed a representative to save a record without filling in the information as to which rep took the call and what platform the problem occurred on.

The fix itself was rather simple as there is already a check to ensure that the other fields (contact name, number, subscriber number) are filled in.

if ((tempNumber.compareTo("") == 0) || (name.compareTo("") == 0) || (input.compareTo("") == 0) || (contact.compareTo("") == 0))
JOptionPane.showMessageDialog(recordPanel, "Please fill in all fields before saving record.", "Incomplete Record", JOptionPane.ERROR_MESSAGE);

In order to include the two additional fields the compound OR statement needed to be expanded.

if ((tempNumber.compareTo("") == 0) || (name.compareTo("") == 0) || (input.compareTo("") == 0) || (contact.compareTo("") == 0) || (platformBox.getSelectedIndex() == 0) || (repBox.getSelectedIndex() == 0))

PlatformBox and RepBox are the JComboBox variables for the two associated fields. If their currently selected option is the initial value of a blank space then the statements will be true and the record will not be saved.

Originally I thought I would need to create another variable or two to track when the selected index of either JComboBox changed, but the getSelectedIndex() method made things so much simpler. Hopefully no other changes will need to be made to the En Guard program as this is the only report of an issue within the past three months.

Friday, July 20, 2007

Diablo II: Magic Find Olympics

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.

I joined this with my one and only magic finder, Malice. In preparation for the tournament I leveled her from 83 to 88 in both the Pits and World Stone Keep (WSK). This was to make her more powerful, her mercenary better able to survive when tanking Mephisto and in search of a four open socket Monarch shield in order to make a Spirit runeword. On my very last Pit run before the tournament a zero socket Monarch dropped, so I used Malice's Hell difficulty socket quest reward to turn it into a mid level Spirit shield.

Then the games were on:

Sign-up Thread
Progress Thread
Results Thread
Meet the Olympians Thread


I ended up 7th in the Mephisto category, the winner actually took a week of vacation to participate so I didn't have a chance as I was only magic finding when I had free time instead of all day long. Overall here are some numbers of my participation:

201 qualifiers
2091 runs completed
10.4 runs per qualifier
39 hours 55 minutes 41 seconds spent overall

Each Mephisto run started off taking 74.35 seconds per each run. For each run I start in Act IV, use the Waypoint (WP) to Act III Durance Level 2 and then teleport to Mephisto. Once Mephisto is eliminated pick up my winnings, use a Town Portal (TP) to Act III town, visit Cain to identify the items and then Ormus to restock on potions and sell unneeded items. Then return via the WP to Act IV and quit the game. Rinse and repeat.

Obviously this is rather time consuming and as I played better ways were found that shortened the running time to 60.6 seconds per run. First was re-rolling the map to look more like this one, where only four teleports are required to reach level 3 of the Durance rather than the 12 I was using before. Also apparently it is possible to active a WP with the Telekinesis spell rather than having to walk/run to each one. These changes shaved 14 seconds off of my time and make the runs more effective, which became apparently when my best two drops occurred in the last two days of the tournament.

Overall it was fun, but a bit draining. I'm sure I won't be running Mephisto again anytime soon. Not only because I'm sick of seeing him but also because I have the vast majority of times he can drop in duplicate so the rewards wouldn't be very good. There won't be another one for six months so we'll see at that time if I partake again or not.

Monday, July 9, 2007

Diablo II: Six of One, Half Dozen of Another Tournament

Going a bit into the past here, but this was the very first tournament that I joined in the DiabloII Single Player Forum. The basic premise of this tournament is that your character can only be equipped with items that have a multiple of six in their description, anywhere in the description. At first this sounds very limiting, but as you get to playing you'll find that such items fall at a fairly regular pace.

Devils_Advocate was a lightning sorceress, a fairly overpowered build that I got rather good at on Battle.net. She's simply to play and since magic finding and rerunning of areas was allowed in this tournament the perfect character.

Questing through Normal and Nightmare was simple enough, some Near Death Experiences (NDE) were encountered but nothing to serious. Quite a bit of MFing was required in NM before moving onward to Hell, where things got very interesting. The going was rather slow in Hell, but I was able to get all the way to Act V before the guest monsters got the best of me. Encountered a pack that eliminated the mercenary and I panicked, which lead to deeds.

Regardless I see this as a successful tournament, not just because I ended up winning with the highest overall score either. This was my very first Hardcore character and I learned quite a bit that should help me with other tournaments, as well as my normal Softcore characters.

Wednesday, June 27, 2007

Java: Hotline Update

Apparently I get to now experience what programmers worldwide already know, those in charge of a program's content like to add all sorts of features without regard for how this will affect the coding of the program itself. I had confirmed that the call options were static and would not change, but apparently that is not the case.

Five additional call options needed to be added to Hotline along with removing a representative's name and adding an additional reporting option. Obviously, removing the rep's name was by far the easiest of all the changes needed, this just required altering a few variables and removing a few lines of code. This did not change any functionality of the program, unlike the other changes that needed to be made.

Adding the five new buttons, each one representing a call type, was not much more involved. New variables needed to be added and then listeners associated with those JButton variables defined. Once this was set it was only a matter of arranging the new buttons to make logical sense, and then resetting the grid layout to incorporate those new buttons. Unfortunately I was unable to convince the others to leave the number of possible buttons at a decent numbers, such as fifteen or sixteen, so instead they settled on seventeen. This makes the program look a little chunky due to the wasted space at the bottom, but it is only a visual issue and not a functionality problem.

The problem with adding new call options after the program went live to the call center is that now the files for June are formatted one way, and the files for July another. Running a report for one month has to be done differently than the report for the other as a result. Due to the changes a few variables must change value for each report type. Instead of rewriting the reporting call and having a separate call for each month I decided to use an If-Else statement to set the values of those variables. If the month being reported is June then the variables are set to deal with a twelve call option file, otherwise they are set to deal with a seventeen call option file.

Finally a new report was required that would acquire the total values for two types of calls, labeled as technical calls, and display those values in the JTextArea. This was needed by the tech group for month end reporting purposes. Thankfully the location of these buttons didn't change from the twelve to seventeen option frame so the same call would obtain the necessary information from each file due to it being in the exact same location.

With these changes the program itself is ready to be re-released to the call center starting in July. Hopefully no major changes will be needed for August, but at least the groundwork is laid to make these changes much easier to accomplish.

Tuesday, June 26, 2007

Diablo II: The Afterlife Tournament

The Single Player forum of Diabloii.net is a lively place where various amounts of tournaments are constantly in progress. The one I joined recently was The Afterlife Tournament. The basic premise behind this tournament is that the only items that can be worn are ethereal items or a set/unique item dropped by an act boss. This of course meant that my character, Angela, had to start life punching all of the monsters until she could use her skills. This would be something I've never had to try before.

As expected resistances were a major problem in this tournament, mine were fairly low until Act V when I was able to create an Ancient's Pledge shield (~50% resistance to all). However since I picked a lightning sorceress as my character dealing damage wasn't a problem in both Normal and Nightmare difficulties. Some near death experiences (NDE) were encountered, normally a result of the lack of resistances. However in the end it was not resistances that killed me but impatience. In the Sewers of the Kurast Baazar (Act III NM) I encountered a pack of dolls that suicide bombed Angela, as described in my death post.

Were I not so impatient then I could realistically have gotten this character to Hell, however I don't believe I would have made her a guardian. I normally play softcore so dying is just something that happens from time to time, but in tournaments hardcore is the only option and one death equals elimination. I'm bound to make a stupid mistake somewhere along the way, so I never expect to actually win a tournament but they are fun regardless.

Thursday, June 7, 2007

Utility: GoldIcon

While I do enjoy creating the programs in Java for work and myself personally, opening them in a DOS prompt is not the most convenient process. Obviously I could simply combine all of the class files into a jar executable, but then all of those files would look identical. This would make things difficult for my coworkers who are utilizing the icons and also simply looks unprofessional. So I use GoldIcon to create all of my icons, it's a freeware program I found while googling for such applications online.
The program itself is extremely simplistic and used only for creating the icon itself, not the executable. This make it perfect for me since my artistic skills are extremely limited. Simply use the cursor to click one of the boxes to place the appropriate color in that position. It is also possible to create shapes (circles and rectangles) automatically.

My icons started very simple, such as a colored box or hourglass figure. I also had a lot of fun creating different shield crests, one of which is now being used for the En Guard program (it seemed fitting). Below you can see some icons that I have created to date.


Not all of these icons are in use. It would be too confusing to have 4-5 shield icons for different programs. Besides, variety is the spice of life, is it not?