Monday, August 4, 2008

Java: Character Simulator Update #6

Apparently I got a bit carried away with the next round of updates to this application. I decided that the skill calculator should have the option of being a standalone application that doesn't require the user to enter in what equipment they are using. As a result I needed to add another JPanel to the southern portion of the BorderLayout manager. This new JPanel, aptly named plusSkillPanel, is populated with JLabels and JComboBoxes depending on which character was selected.

Since the user will be able to select manually which types of +skill mods are available I needed to be able to keep track of what has been selected. This was done through a new int array variable and a listener that altered the array depending on which JComboBox was changed.

Of course if the skill calculator could be changed to be a standalone program then the equipment and final stats tabbedpanes would need to become hidden at that time. Otherwise the array variable holding the +skill mod values could be altered in both ways and that would lead to incorrect information being displayed. This was done by adding a new menu item, specifically a JCheckBoxMenuItem. When selected the tabbedpanes for final stats and equipment are removed from the program and the plusSkillPanel JPanel is added to the bottom of the application. When it is unchecked all of these changes are reversed.

if(event.getActionCommand().compareTo(STAND) == 0){ //standalone menuitem pressed
if (standaloneMenuItem.getState() == false){
tabbedPane.insertTab("Final Stats", null, new Stats(), null, 0);
Stats.SetCharType();

tabbedPane.insertTab("Equipment", null, new Equipment(), null, 1);

Skills.plusSkillPanel.removeAll();

Once that was completed it was time to work on the calculations and displays of the skills. There are seven characters with thirty skills apiece, that's 210 skills overall and each has it's own method calculating the value dependent on what level is selected for the skill. When calculating these skill values the synergies had to be taken into account as well, so the calculates are a bit lengthy, but not too complex.

First the String variable that holds the description of the skill's value is set to a null string just in case any previous data had been present. After that the method checks if the skill itself has either any hard points assigned or is gaining any points from equipment (which of course doesn't work in standalone mode). If points are in the skill then the String variable is altered to continue all of the values of the skill in question, calculated with synergies being taken into account as well as +skill mods. Then the String variable is set as the ToolTip for the JComboBox of the skill.

Along with this ToolTip a second tip was created that resides on the JLabel of each skill. Specifically this ToolTip is assigned in the constructor and is a text description of what the skill does exactly.

Each of these changes had to be made for all 210 skills, and after a while became very tedious. However it is all done and the skill calculator does work as intended, with a few updates necessary. Specifically:

1. Update the skill text files to hold data for skill values up to 55
2. Fix bug where JComboBox ToolTip is not updated when a synergies skill is changed
3. Fix bug where when switch between characters the SkillPanel panel is repopulated even when the application is set to standalone mode, where only the skill calculator Tabbedpane is visible

Diablo II: Strafazon Skill Layout

A Strafazon is an Amazon that uses the skill Strafe as her primary damage dealing skill. There is a lot of discussion about the merits of Strafe vs Multishot, I personally prefer Strafe due to the fact that every arrow carries any mods the character has and it auto-targets monsters. Which is very nice for hitting enemies that are off the screen without putting the character into any danger. The skill setup is as follows:

Critical Strike - 1
Magic Arrow - 1
Inner Sight - 1
Multiple Shot - 1
Dodge - 1
Cold Arrow - 1

At level six some very useful skills become available. Critical Strike will allow the character to deal extra damage for free and Cold Arrow slows down any enemies it strikes. This is especially useful in helping the mercenary survive any dangerous mobs. Cold Arrow is also ideal for use against mob bosses until something better becomes available at later levels.

Avoid - 1
Slow Missile - 1

At level twelve Slow Missile becomes available. This is a useful utility skill that makes ranged monster packs far less dangerous, again allow the mercenary to survive in situations he/she normally wouldn't.

Penetrate - 1
Guided Arrow - 1
Ice Arrow - 1

At level eighteen Ice Arrow and Guided Arrow become available. Both are useful against mob bosses and replace Cold Arrow in that regards. Ice Arrow also will completely freeze any non-cold immune monsters (not champions/bosses) which is extremely useful to keep mobs in check.

Evade - 1
Decoy - 1
Strafe - 1

Finally Strafe becomes available at level twenty-four. However a one point Strafe is a bit too mana intensive to use without some sort of mana leech. For now it remains a backup skill with the normal attack and Ice Arrow being the skills of choice for the time being. Decoy also becomes available and will be used constantly for the rest of the game. It is very useful as a scout to place on the opposite side of doors in the dungeons to see what awaits instead of the character walking through themselves.

Strafe - 7
Valkyrie - 1
Pierce - 1
Freezing Arrow = 1

At level thirty all the main skills become viable. Valkyrie is now available to help the mercenary tank and as a result the mercenary will survive fights with ease that before he/she was dying consistently. Freezing Arrow replaces Ice Arrow as the crowd control skill of choice, as it too will freeze most monsters in place and the splash damage makes Freezing Arrow more effective. Strafe is doing respectable damage now at level seven but still should only be used if mana leech is available or if the situation is dire.

Strafe - 20
Valkyrie - 11

At level forty-three Strafe is maxed and should be the main killing skill. The valkyrie has been increased as well and will be able to tank anything in the game at this point, including Act bosses without any issues.

Valkyrie - 20

At level fifty-one the valkyrie is maxed and tanking like a champ. Many people believe the Valkyrie should be increased only to level 17, including +skill mods. Personally I prefer my valkyrie to have as much life as possible, which is why I will max the skill out and then increase it further with +skill mods.

Penetrate - 20

At level sixty-seven the Penetrate skill is maxed. This will increase the Attack Rating (AR) of the character. While not really necessary in Nightmare, this will be very useful in Hell to ensure a high chance-to-hit percentage.

Pierce - X

Piece is then increased to a level that gives an excellent chance (~100% is best) of the attack piercing the target monster and hitting whatever is behind. The exact level of Pierce is subjective to how many +skill points the character has as well as what weapon is used. If the character is using the Buriza-Do Kyanon then no points are needed here as that weapon has a 100% chance to pierce automatically. If the character is wearing the Razortail belt, 33% chance to pierce, then that must be taken into account as well.

Once Pierce is completed the character may have extra points left over, which can be used anywhere desired. More points could be placed into Decoy to make it a more viable shield and also increase the life of the valkyrie. Points could be placed into Critical Strike to increase the chance of dealing double damage, and with so many arrows being shot per second those chances are pretty good. Or the extra points could be placed into Freezing Arrow to make a more viable backup skill, or into Guided Arrow for a more viable boss killing skill.

Final skill Distribution:

Strafe - 20
Penetrate - 20
Valkyrie - 20
Freezing Arrow - 1
Pierce - X

Sunday, August 3, 2008

Diablo II: MFO #2

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 joined the Mephisto category and ran him until I was bored silly, and still lost badly. So this time I decided to run someone else since I had just about everything that Mephisto could drop. I choose Pindleskin since he can drop a ton of items I don't have. My one and only magic finder, Malice, was given the task of running Pindle until I couldn't run any longer. She was leveled up a bit more since last MFO, now at level 92 so surviving shouldn't be much of an issue.

Sign-up Thread
Progress Thread
Results Thread

I ended up 4th of out seven participants, so I was basically average of our group. Malice made around 2300 Pindle runs over the nine day period, averaging a run every twenty-nine seconds. Unfortunately my magic finding luck has been fairly poor as of late, and that carried over to the MFO. I averaged one qualifier every 79 runs, which is about four times higher than my past two Pindlethon averages. Needless to say my finds weren't spectacular by any stretch of the imagination, but at least no one above me wanted them so I could keep what I found.

Qualifiers:
IK Stone Cruser - 3
Laying of Hands - 2
Credendum - 1
M'avina's Embrace - 1
Wizardspike - 1
Shadow Killer - 1
Windhammer - 1
Hellslayer - 1
Lightsabre - 1
Viperfork - 1
Demon Limb - 2
Jade Talon - 1
Baranar's Star - 1
Rune Master - 1
Tal Rasha's Guardianship - 2
BK Sacred Charge - 1
Cranebeak - 1
Widowmaker - 1
Fleshripper - 1
M'avina's Caster - 1
Steel Shade - 1
Spirit Ward - 1
Alma Negra - 1

The Tal Rasha armors were the highlight of my stash. This ensured I only need to find the amulet to have the entire set. For non-qualifiers I did find a Paladin combat skiller and a Vex rune. However due to a mistake on my part my stashes for the past eight months were lost a few days ago so those items, along with quite a bit else were lost. Not to fret though, I still have all my items from the last Pindlethon and Mephathon so I don't need to do any magic finding to replace lost items.

I think for the next MFO I'm going to run something else, Pindle is a boring target. I'm thinking the Level 85 areas may be my next attempt. There I can add variety to the runs as well as use different characters if I want. That way socketables and so forth will increase my stash and after I lose I'll still be quite a bit richer than before.