Thursday, October 30, 2008

Java: En Guard Update #6

Beyond the search feature there were a few other minor changes I wanted to make to the En Guard program. First off the "Contact Info" JTextField is currently a required field to submit a new record. This field turned out to be less useful than I had intended so I am making it an optional field instead. At first I thought I would need to alter the code checking which fields are filled as well as the code that opens and saves the records. As it turns out none of this was necessary. All I needed to do was set the text of the JTextField to be a space character. By doing this the field is technically "filled" and saving/opening records works just as it did before. Good reminder to always look for the simple solution first and then work towards more complex resolutions.

The second feature I wanted to work on was making the skin chooser a bit more viable. Currently it works great to change the background color of the application, however whenever the app is closed it reverts back to the original color. This can get tedious to change such information every time the program is opened. Therefore I added a log in to the program that forces the user to choose a representative name before gaining access. This method is called before the properties of the JFrame are set.

JOptionPane.showConfirmDialog(aFrame, loginPanel, "Select Name", JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE);
loginIndex = loginBox.getSelectedIndex();

The log in sets the loginIndex variable to the index corresponding to the rep's name. This information is then used to designate the file name that the program will need to open in order to determine what color to set the background to. Each rep has their own text file containing their color information, such as:

150
200
250

The file is then opened and each line of text assigned to the background color variables red, green and blue. Once done the SetBackground() method is called to change all of the JPanel's color accordingly. The text file will be updated whenever the ColorChanger() method is called as well, to ensure that the next time the program is opened it does so with the most recently selected color combination. As an added bonus, as the rep's name is being stored for this process, the Entered By field is automatically populated with the rep's name once the program is opened.

Tuesday, October 28, 2008

Java: En Guard Update #5

Two hundred and sixty-one lines of code later the Search tab is complete. The components were easily modified from other programs I have already made so putting the GUI together was a piece of cake. A combination of BorderLayouts and GroupLayouts were used for the look-and-feel portion. Once that was done the workhorses of this tab, the Listeners, needed to be created.


The Listener associated with the JList was copied along with the JList component itself and only small modifications were required to allow it to function properly. The JButton Listener however had to be created from scratch. Once the button was pressed several things needed to happen. First I needed to populate an array of file names for those currently present in the data directory. Originally I had gone with a brute force method since all of the file names are numbers ranging from 1 to 2.5 million. I had a For loop checking which files existed and if they did adding them to the JList component.

Obviously this took quite a bit of time to complete and slowed down the program considerably, enough so that it actually crashed the program on more than one occasion. Therefore a rewrite of the method (called by the Listener) was required. In reviewing the File Class I noticed a nice method named list() that would output a String array of the files present in a given directory. Exactly what I was looking for. Then calling a length method on the created arrays produced the exact number of files present so the slots used in the array is known and an exception isn't caused by trying to access a nonexistent array slot.

This search method was much faster than the previous one and does not crash the program at all, which was a nice bonus. Now a few other minor details need to be completed to have this version of En Guard finished. Specifically I want to add a log in dialogue to the program that will register which representative is using that version. This will allow me to auto populate the Submitted By field as well as save the user's skin color preference.

Thursday, October 23, 2008

Diablo II: Matriarch Theia

Up to this point I have a single MFer that I use as all of my other characters are retired, except the strafer that may make some Pit runs in the future. I wanted to make a character that could do many types of MF runs, such as Pindle, level 85 areas but mostly NM Flayer Jungle and onward as well as NM Cows in search of Skiller Grand Charms. Currently I have maybe 7 of them total so a larger stash would be very helpful.

To that end Theia was born. She takes her name from the Greek Titaness who ruled the sun. Her name brings overtones of brightness and that is very fitting for a pure lightning sorceress. I decided on zero backup skills as getting through Hell won't be too difficult with a well equipped Act II desert warrior by her side. Beside which she'll be living in NM most of the time and therefore doesn't need to worry about immunities.

Normal was fairly uneventful. The going was very slow at first with Charged Bolt the main weapon of choice until Lightning became available. Very early on mana consumption became a problem and will remain one until I either equip the mercenary with an Insight weapon or find lots of +mana items. Either way she leaves town with an inventory filled with mana pots and returns quite frequently.

She didn't run into any issues besides one against Infector of Souls in the Chaos Sanctuary. Up to this point she fried everything easily so while the monsters surrounded the mercenary she simply fired Chain Lightning at them over and over. I wasn't paying complete attention and apparently Theia was standing a little too close. One of the monsters wandered her way and hit her with a blast of flaming breath that simply drained her life to zero and killed her off. Didn't help she had zero fire resistance up to this point.

I was very annoyed at myself for such a stupid mistake, and another reason I don't play Hardcore outside of tournaments. Regardless Theia avenged that death by frying everything from that point onwards with a vengeance. The rest of Normal was finished with little fuss and no interesting drops.

Nightmare was a bit more difficult. Lightning immunes started to appear and the mercenary's weapon wasn't really up to dealing with them in more than 3 monster packs. Going was a bit slower and a few more deaths occurred, mostly due to player inattention than anything else. Still, progress was made all the way the end of Nightmare without too much fuss. The WSK did have Gloams on 2 levels, Minatours on 3 levels and dolls on the final level. But since there weren't any stair traps Theia was able to clear all of them without dying. She leveled up on Baal to be able to wear all of her endgame equipment, minus the Archainds Mesh, before venturing into Hell difficulty.

Once gear was twinkled on Theia became a one-woman wrecking crew. She simply ripped apart and non-LIs and used Frost Nova to chill (slow) the LIs encountered so the mercenary could take them out. Lots of monsters died in one hit, very few needed more than three. Absolutely nothing stood in her way, including LIster and company. Oddly enough, she didn't die a single time all in Hell, while in Nightmare she must have died a dozen times. Mostly due to impatience, and purely because I can (Softcore ftw).

Overall a decently fun character and definitely my most powerful one to date. Her future plans are to do cow and NM Act III runs in the search for more skiller grand charms. She's making good progress as she found two while questing, a Martial Arts and a Shape-Shifting skiller.

Stats:
Level 82
Strength - 142(167)
Dexterity - 25(27)
Vitality - 298(352)
Energy - 35(57)

Life - 757(988)
Mana - 197(472)

Lightning Resistance - 20
Fire Resistance - -9
Cold Resistance - 29
Poison Resistance - 20

Skills:
Charged Bolt - 20(32)
Lightning - 20(32)
Chain Lightning - 20(32)
Lightning Mastery - 20(32)
Nova - 6 (rest)
Teleport - 1(13)
Thunder Storm - 1(13)
Frozen Armor - 1(10)
Frost Nova - 1(10)
Warmth - 1(10)

Equipment:
Weapon: The Oculus
Armor: Skin of the Vipermagi
Boots: War Traveler
Belt: Arachnid Mesh
Gloves: Chance Guards
Helm: Harlequin Crest
Ring 1: Nagelring
Ring 2: 6% FR, 9% CR, 1 strength, 10% FCR
Amulet: 12 strength, +3 lightning skills

Mercenary (Might Holy Freeze Warrior)
Helm: Tal Rasha's Helm
Armor: Shaftstop
Weapon: Cryptic Axe 'Insight'

Hellforge
NM: Sol
Hell: Hel

Wednesday, October 15, 2008

Diablo II: Guardian Bob

Note: Proper repost from a previous one

Bob is a Fishymancer out of the No Vitality tournament. He also has the distinction of being my very first guardian so yes I am very proud of him. I only play HC in tournaments, and my next closest guardian was a lightning sorceress in Skunkbelly's Six of One, Half Dozen of the Other tournament that died in Act V Hell.

Anyway, for those that aren't in the tournament, the basic premise is that no stat points may be placed into vitality. Equipment and charms that give vitality are fine, just no hard points. This means Bob ended his quest with 284 unused stat points, but all of the skill points were used as they became available. This is a single pass, no twinkling tournament (as is the norm).

Bob is a traditionally build Fishymancer, so:
Skeleton Mastery: 20
Raise Skeleton: 20
Raise Skeletal Mage: 20
Corpse Explosion: 20
Decrepify: 1
Revive: 1
Summon Resist: 1
Dim Vision: 1
Bone Armor: 1

One in all the prerequisites as well. That last one (Bone Armor) was quite key, I'm sure it saved Bob more times than I can count, especially in the beginning of the tournament when Bob had so little life.

Obviously +life and +vitality items were prized and those were equipped before anything else, except maybe lightning/fire resistance items. This resulted in some interesting stat numbers:

Strength: 151 (156)
Dexterity: 25 (31)
Vitality: 15 (57)
Energy: 25 (45)
Life: 226 (621)
Mana: 187 (397)

Equipment:
Helm: Peasant Crown (Ort)
Weapon: Ume's Lament
Shield: Spirit Monarch
Armor: Gothic - 38 life, 60% FR, 30% LR
Gloves: Trang-Oul's Claws
Boots: Tearhaunch
Belt: Plated - 96 life
Amulet: 33 mana, +2 summoning skills
Ring 1: 30% FR
Ring 2: 12% resist all

Mercenary
Helm: Circlet - 15 life, 98 AR, 36% FR, 14% LR, 14% CR, 14% PR
Weapon: Hwanin's Justice
Armor: Hwanin's Refuge

Overall Bob was quite fun, and frustrating to play. I've never actually gotten a Fishymancer all the way through Hell before, HC or SC, as I got bored. However I believe being a tournament and HC was enough incentive to keep me glued to playing him. His minions kept running all over the place and I truly wished I had found a teleport amulet to organize things easier. By far the hardest places were the indoor areas with narrow corridors: Act II tombs, Catacombs, Act III dungeons/sewers. More often than not the army didn't want to walk through the door until Bob had, which isn't very healthy for Bob as I couldn't see what was on the other side. I ended up using the clay golem as a scout, casting it into the next room and then watching what it did. Slow, but fairly safe.

Going was fairly slow but constant in Normal and NM, it was in Hell that he really shined. Reason for this is that Normal/NM was run on /p8 while Hell at /p1, so Corpse Explosion became available and viable in Hell. By the end of it Bob had quite the army going:

1 might mercenary (Mizan)
1 clay golem
11 skeleton warriors
11 skeleton mages
8 revives

Enough meat shields to keep elemental attacks away from Bob. His three worst enemies were Gloams (of course), Slingers (piercing attack) and Oblivion Knights (IM). Thankfully they never all appeared at the same time.

Diablo II: Guardian Atropos

Note: Proper repost from a previous one

Atropos is my second character from the No Vitality Tournament, and as it turns out also my second only Guardian. Some of you may remember Bob.

For those that aren't in the tournament, the basic premise is that no stat points may be placed into vitality. Equipment and charms that give vitality are fine, just no hard points. This is a single pass, no twinkling tournament (as is the norm).

Atropos is a level 82 Frost Maiden that uses Magic Arrow for cold immunes, so:
Cold Arrow - 20
Ice Arrow - 10
Freezing Arrow - 20
Magic Arrow - 13
Valkyrie - 20
Pierce - 1
Decoy - 2

Also one point in all prerequisites. As you can see I did make a major mistake with the Ice Arrow points. At the time, in Normal, adding points gave me the ability to freeze enemies and deal more damage quicker. I figured that maxing all three cold skills was necessary anyway. After reading up on Frost Maidens a bit more however I realized the freezing length it provides is basically negated in Hell and therefore the 9 extra points there would have been much better off in Magic arrow and Decoy.

Obviously +life and +vitality items were prized and those were equipped before anything else, except maybe lightning/fire resistance items. This resulted in some interesting stat numbers:

Strength: 100 (100)
Dexterity: 330 (345)
Vitality: 20 (20)
Energy: 50 (55)
Life: 272 (749)
Mana: 189 (294)

Equipment
Weapon: Stag Bow - 10-14 cold dmg, 99 poison dmg, +2 bow skills
Boots: Heavy Boots - 40% LR, repair
Helm: Circlet - 27 mana, 14% FR, 14% LR, 44% CR, 14% PR, 17% MF
Armor: 93 life, 30% FR, 30% LR, 21% PR
Amulet: 98 life, 21% resist all
Ring 1: 64 AR, 23% CR
Gloves: Vampirebone - 14% FR, +77% Gold, 23% MF, 5% AR
Ring 2: 9 dex, 30% FR
Belt: Plated - 97 life

Mercenary (Defiance):
Weapon: Cryptic Axe - Malice
Armor: Mesh - 23% FR, 26% CR, 17% FHR
Helm: Tal Rasha's

Bonuses from charms:
189 life, 71 mana, 20 LR, 43 CR, 5 PR, 13 FR, 3 sources of cold dmg

Overall she was a blast to play, but definitely underpowered. Due to being untwinkled the main concern was the dismal amount of non-cold damage she inflicted, so cold immunes in Hell gave her constant headaches. As a completely opposite to Bob, she favored the indoor and cramped areas that forces monsters to bunch up and therefore one arrow would freeze huge packs.

In the beginning only Atropos was a bit overpowered, cold enhanced arrows simply made short work of any monster/boss she encountered. Then Andariel dropped a Dimoak's Hew and suddenly Emilio was even more overpowered, so much so that Atropos wasn't able to add much to any battle before Emilio finished everyone off. As a result until Freezing Arrow was available Atropos was a cheerleader.

As expected cold immunes were terrible, starting in Act V Normal. The terrain had to be used constantly to bottleneck the monster packs so Emilio and the valkyrie could deal with them 2-3 at a time. More than that and Emilio would be in serious need of a doctor...or mortician. This trend continued into Hell until Emilio could get a better weapon. My rune finding was terrible, as I wanted an Insight but never found a Sol nor enough Amns to cube one. So we went with a Malice instead for the OW and increased damage.

For the most part things were safe, but that may have been due to me being extra careful than anything else. Decoy was used liberally as both a scout and a, gasp, decoy to split monster group's attention. Probably cast is a couple thousand times in Hell alone. Also picked up the trick of running away slightly from battle, just enough to get Emilio to follow but not the valkyrie. Allowed me to position him so he wasn't the main focus of attention for the monsters, since he was quite fragile.

There were a few scary moments. City of the Damned contained Stygian Hags, which are cold immune and so are their spawn. They multiplied faster than my crew could kill them. So I took to sprinting through the level looking for the WP. Really not a good idea as I did get cornered at one point, but managed to work my way out. Second troublesome spot was the Ancients, as I just couldn't split them up for the longest time. As a result I almost ran out of gold resurrecting Emilio. Finally I equipped some FRW and that allowed the Ancients to be dealt with one at a time.

Baal himself was an epic battle worth of song, dance and the consumption of much recreational beverages. Atropos had more NDEs than the rest of the Acts put together. Appendages littered the area, Baal was cloned more often than not and Emilio took a dirt nap early (slacker!). But eventually Atropos whittled down Baal's life to nothing after at least 30 trips back to town to restock and heal.

Diablo II: Matriarch Malice

Note: Proper post from a previous one.

Well I recently restarted. This means of course I need a magic finder, so introducing Malice the Meteorb sorceress. She's my very first Meteorb as I normally build a lightning sorceress for magic finding purposes. Wanted something different this time around.

Playing softcore, thankfully. Had I not then Malice's journey would have ended in the Normal Blood Moor, I kid you not. Right at the beginning of the Cold Plains was a pack of 3 Champion Brutes that Flaive attracted my way by shooting at them (and missing I might add). Very tough characters for a level 6 sorceress with purely starting gear and a one point static field/firebolt. Without a merc to distract them I tried to get in close enough to static them a bit, and got too close. A quick stunlock second later Malice was dead, my earliest death ever.

After that auspicious start Malice made good progress through Normal with no other close calls or really interesting issues. Picked up Frozen Orb just before dealing with Mephisto so from then until Nightmare it was a cakewalk.

However Nightmare gave me some problems. Apparently the Diablo gods knows I've restarted and therefore threw as many bosspacks at me as possible, normally in pairs. This lead to a death in the Dark Wood. A might enhanced bosspack of spearwomen snuck up on me under the trees, didn't see them until Malice was sprawled on the ground. Another death to a super fast lighting beetle bosspack in Act II didn't help my confidence in this build much (or my abilities). However everyone seems to swear by it so I stuck with Malice. She started to slow down considerably in the Kurast areas of Act III, but slowly and surely got to Mephisto. Used the tried and true tactic of leaving the mercenary as bait for the boss. Mephisto killed the merc but at the same time Malice was able to static field him a lot. This lead to several minutes of Malice running circles around Mephisto throwing Frozen Orbs. Same tactic used on Diablo and Baal (with some meteor thrown in).

Hell ended up being as long as I expected, even when run at /p1. Of course the first three bosses Malice encountered were fire/cold immune but after that they got more manageable, but FI/CI guys still showed up regularly. Didn't help that she was wearing her magic find gear until Act IV as I forgot it was equipped (explains why her resistances were negative). Once this was corrected she did a bit better until Act V, where every drop was picked up for gold in order to pay for mercenary resurrections. Must have resurrected him at least 50 times in Act V alone. Oddly enough, the regular monsters gave Malice more trouble than the act bosses, both Diablo, Baal and Baal's Minions fell very fast, with Baal requiring 30 seconds tops, and the Ancients were only rerolled twice due to receiving dual fire/cold resistant opponents.

One thing to note is that the WSK did give one of the nastiest monster grouping possible. Dolls and Gloams backed up by Horadrim Ancients. :yikes: A lot of cat-and-mouse was played to draw monsters away from their packs to deal with them in 2-3 sized groups.

Statistics (before equipment)
Level: 82
Strength: 92(72)
Dexterity: 30(25)
Energy: 66(35)
Vitality: 273(268)
Life: 765
Mana: 342
[100 Stat points unused]

Resistances
Lightning: 75
Fire: 73
Cold: 35
Poison: 66

Skills
Fire Mastery, Fireball, Meteor, Frozen Orb: 20
Cold Mastery, Static Field, Teleport, Warmth: 1

Equipment
Helm: Tarnhelm
Armor: Skin of the Vipermagi
Weapon: +2 Fire skills, 20% FCR, 39% Fire Resist Orb
Shield: Lidless Wall
Belt: 22% Light Resist, 9 Str
Boots: 30% Light Resist, 29% MF
Ring1: Nagelring 29%
Ring2: Cold Resist 30%, Poison Resist 28%, Light Resist 5%, 30 Life
Amulet: Maras 30%
Switch: Gull Dagger, Mil's Orb

Mercenary
Helm: Vampire Gaze
Armor: Griswold's Heart
Weapon: Kelpie Snare

Charms (picked up every one I found with resistances): Poison Resist - 50%, Fire Resist - 28%, Cold Resist - 17%, Light Resist - 31%, Mana - 58, Life - 15

Noteable finds: Maras (H Mephisto), Vipermagi (NM Andariel), Lidless Wall (NM Mephisto), Vampire Gaze (rack in NM Durance Lvl 3)

Malice will be used to run Mephisto and Pindle mostly, with maybe some Baal thrown in since he was so much easier than expected. Thinking the next character might be a Plague Javelin Amazon, as I never got to finish my first one as she was a tournament character.

Java: En Guard Update #4

The way the program is currently written it is not very easy to modify or add additional components. Due to all of my work with JTabbedPanes with the CharSi application I decided to make a similar change here. To do this quite a bit of code needed to be altered and consolidated.

Up to this point I had two java files in order to create the GUI portion of the program. I decided to consolidate those two files together into a single java file, especially considering one of them was only 60 lines of code long. Problems came up there as I had used the same variable names for different components in each file so once they were combined the GUI was missing pieces. Eventually everything was ironed out.

The next step was to turn the main panel in to a JTabbedPane and each subsequent tab into it's own java file. Using CharSi as a guide this process was not too complex and left me with two workhorse files, Info.java and Search.java. Info.java contains the GUI portion of the application along with the methods utilized to open and save the informational text files.

Search.java will host a search engine that will allow the informational text files to be searched one at a time for a particular string. The resultant list will be displayed in a JList and when a selection is clicked it's contents will be displayed in a JTextArea. The other change that needs to take place is that the Contact Information field will no longer be a required field. It will still be present but the record may be saved without any information displayed. It simply didn't turn out to be as useful as I had hoped.

Tuesday, October 14, 2008

Diablo II: Lightning Sorceress Skill Layout

A Lightning Sorceress is exactly what it sounds like, a sorceress who uses only lightning skills to deal damage to her enemies. As a result her damage output is staggering but she has real difficulties dealing with Lightning Immune (LI) monsters. The skill setup is as follows:

Charged Bolt - 3
Warmth - 1
Static Field - 1

At level six the character has to main skills, Charged Bolt and Static Field. In Normal difficulty SF can reduce a monster's life to a sliver, so it is used quite often for just this reason. CB is tough to aim and rather mana intensive, so used sparingly. As a result the character will still be using a staff to physically hurt her enemies for the first several levels.

Lightning - 1
Charged Bolt - 9

At level twelve Lightning becomes available. At this point CB is more effective due to the larger amount of bolts that are released. It also deals more damage than Lightning so while it is very mana intensive CB is the skill of choice against large packs, with the stragglers deal with by a few staff hits.

Charged Bolt - 10
Lightning - 5
Chain Lightning - 1

At level eighteen Chain Lightning becomes available. This is the ultimate crowd control for this build, especially against packs that spread out as they attack, Flayers for example. Lightning is also becoming a more viable attack skill with the added points. Mana will remain a problem here so solitary monsters are still dealt with by the staff, while the character will be drinking mana potions constantly.

Telekinesis - 1
Teleport - 1
Chain Lightning - 6

At level twenty-four Teleport becomes available. At lower levels it isn't used too much, however does allow the character to reposition the mercenary as needed or pull him/her out of trouble at a moments notice.

Lightning - 10
Lightning Mastery - 1

At level thirty both Lightning and Chain Lightning have become viable skills, even with the large mana consumption. They are dealing enough damage that only a few hits are needed to eliminate any monsters, so while mana potions are in constant need the character isn't running out of mana every few seconds.

Chain Lightning - 10
Lightning Mastery - 20

Lightning Mastery is maximized first as it helps both of the main skills, Lightning and Chain Lightning, at the same time. This is completed by level fifty, which correlates to the first act or two of Nightmare difficulty.

Lightning - 20

At level fifty-nine Lightning is completed. This will be used as the main skill versus bosses as well as closely grouped monster packs. In the end this skill's damage will be about twice as great as Chain Lightning so in many circumstances is the skill of choice.

Chain Lightning - 20

At level sixty-seven Chain Lightning is finished and the two main skills for this build are fully charged. Chain Lightning is used in circumstances where the monsters are spread out and a single Lightning burst wouldn't damage more than 1-2 at a time. Instead of dealing with monsters one at a time this skill will target all of them at once, assuming they are within the same line-of-sight.

Frost Nova - 1
Frozen Armor - 1
Nova - 1
Thunder Storm - 1

At level seventy-one a few utility skills become available. up to this point Lighting Immune monsters have been few and far between, but all of that changes in Hell difficulty. As a result Frost Nova is utilized to chill and slow down the LI hordes while the mercenary deals with them one at a time. It won't do much damage, but that is fine since the chilling effect is the intent of the skill. Thunder Storm is another utility skill that won't do a great deal of damage but is useful enough to invest a single skill point. Thunder Storm randomly targets monsters so it won't be used to eliminate a wanderer. Instead it is useful as a early warning system when monsters become near as well as a way to put the weaker monsters (fallen, flayers) into hit recovery. Frozen Armor is used purely to chill monsters that get within melee range of the character. They should be slowed enough to allow the character to exit hit recovery mode and then either run or teleport to safety.

Charged Bolt - 20

At level seventy-nine a synergy for both Lightning and Chain Lightning is completed and this build's damage is pretty much completed. All that is left is to put the remaining points into Nova, which is another synergy for the lightning skills.

Final Skill Distribution:

Charged Bolt - 20
Lightning - 20
Chain Lightning - 20
Lightning Mastery - 20
Thunder Storm - 1
Teleport - 1
Warmth - 1
Frozen Armor - 1
Frost Nova - 1
Nova - rest

Friday, October 3, 2008

Diablo II: The Obsession Tournament

As per the name, in Obsession Tournament obsession is the name of the game. Choose a skill and then you are required to max it and all of its synergies out before choosing another skill. The same holds true for stats, choose either Strength, Dexterity, Vitality or Energy and four out of five stat points must be placed there each time the character is leveled up. Along with these restrictions there are equipment rules as well. An element is also picked and then all equipment used must reference this element in some way, same holds true for the attribute selected.

I choose an Amazon named Mercury who would be obsessed with Plague Javelin, Lightning and Vitality. Going started slow as both javelins and armor were lacking for most of Act I. This was Ok since the main attack isn't even usable yet, so still progressing but slowly. Only against Andariel did Plague Javelin become available, but from there onward things became much easier. The normal monsters were tanked by the Act II town guard while Mercury poisoned them all from afar. The only problems appeared from Act bosses who killed off the mercenary. Mercury would run circles around them and throw javelins periodically to keep the poison acting at all times. Very slow way to whittle down a boss' life, but eventually they fell.

One extra rule that caused me problems is that all equipment used must be of the type equal to the difficulty the character is in. Therefore in normal regular equipment is used but in Nightmare the character must have all exceptional equipment, and so forth. This means starting Nightmare Mercury was basically naked and starting from scratch.

Once Plague Javelin was maxed out Mercury moved on to maxing Valkyrie for an additional tank to help out the mercenary. He's been getting swarmed up to this point and needs help surviving monster mobs. Mercury got to Hell and then suddenly realize I poorly planner her out. She didn't have the strength/dexterity to wield an elite javelin. As a result she would have to punch her way to Baal. Tried this up to the Cold Plains and then called it quits and retired, took far too much time. This of course is a good lesson for me, plan out the character way in advance before starting to ensure something like this never happens again.

To redeem myself I started Wraith, an Assassin obsessed with Strength, Poison and Cloak of Shadows. The idea was that CoS would keep her alive in the most dire of circumstances and then she could obsess in an offensive skill afterwards. Unfortunately I never got that far. Wraith met her end at level 22 to the lightning beetles of Act II Normal. Her lightning resistance was at 40% but with so many charged bolts flying around she couldn't drink health potions fast enough.

This lead to the third and final character of mine in this tournament; Rayne the sorceress obsessed with Vitality, Lightning and Static Field (then Firewall). Her basic strategy was static field like mad while the mercenary tanked, then firewall the remaining monsters. This worked wonders in Normal where SF can actually kill monsters. Nightmare had problems as SF can only reduce monster life to 1/4 their total. However Rayne didn't get much of a chance to see how NM would go, she met her end to a Might enhanced, Extra Fast, Extra Strong, Cursed Treadhead in the Dark Wood. The mercenary died within seconds and Rayne couldn't outrun the pack.

That ended this tournament for me, I had just restarted a week or two earlier and wanted to concentrate on Softcore characters and magic finding for a while.

Diablo II: The Afterlife Tournament

The Afterlife Tournament is another from Wolron, all which are quite interesting. This tournament has restrictions on both skills used and stat points assigned per character type. I choose a Sorceress and as a result was restricted to the Lightning skills, with only a single point allowed to vitality/strength per character level. The only equipment allowed to be used was either ethereal or had the word "angel", "radiance", or "rainbow" in it.

Angela started her quest off by punching all of her monster enemies, since she doesn't start with any ethereal weapons. This was quite a new experience and lasted her quite a while into Act I before decent skills became available (Lightning). Once she did have her skills then progress went swimmingly, as pure lightning sorceresses are traditionally overpowered.

She kept having to dodge monster packs and teleport to safety. Apparently I had great difficulty keeping Angela out of harms way, as more often than not she's on the front lines with the mercenary behind her rather than in front. Still she progressed all the way to Act III of Nightmare before meeting her end. She was walking through the sewers underneath the Kurast Bazaar when she ran into a pack of monsters she couldn't see. They were hidden by one of the walls. Still Angela let loose with a Chain Lightning strike just as she heard their attack and realized they were dolls. The entire group exploded as one and took Angela along with them. As it turned out I ended up with the second highest Angel(sorceress) of the tournament at level 61, beaten out by Grisu who Guardianed his Angel.

Diablo II: Green with Envy Tournament

The Green with Envy Tournament has a rule set where Only set equipment (green) may be worn. White or grey items may be used as placeholders until a green item is found to replace them. These rules count for mercenaries as well. Due to these restrictions quite a few build options are not viable, such as a Javazon.

I entered with a Paladin, Myau, starting with the Iratha's set as starting equipment. I choose this equipment due to the resistance bonuses, since with a melee character that is what worries me the most. Myau will be a Frost Zealot, just haven't decided on the backup skill yet. Myau breezed through most of the difficulty due to the overpoweredness that is Holy Freeze, and the massive resistance boost from Iratha's set items. However he met a quick end when wandering through the Pit in Act V. Encountered a bosspack of Moon Lords (my worst melee opponent) and started to tanked before checking the boss' mods, he was apparently extra strong.

With that I started another, Hephaestus. He will also be a Paladin, a Hammerdin to be exact. I have never tried a hammerdin before so the going was a bit rough, especially aiming the darn things. However with a high level Concentration aura active the Act II desert mercenary was killing all the monsters very quickly so Hephaestus sometimes didn't even have a chance to jump into the fray before it was time to move on. Things stayed interested with the extremely low resistances that he had, so quite a few NDEs encountered along the way.

After finishing Normal difficulty at level 46 I decided to retire this character. I just wasn't having much fun with the Hammerdin. I know they are seriously overpowered characters but the build type just isn't for me.

Diablo II: Glass Cannon Tournament

I've played in more tournaments than I've posted, so I'm catching up on the older ones I've been a part of, hence the next few posts.

The Glass Cannon Tournament is designed for everyone to be an Amazon and all stat points must be placed into Dexterity.

I entered with Yoga_Instructor, who I planned on making a Strafazon. Not a good plan as it turned out since finding a good bow was going to be difficult at best, the elemental bow skills would have been much better to use. She didn't have any trouble all the way up to Mehpisto in Normal, and then promptly died at level 29. Her mercenary was tanking quite well while Yoga_Instructor fired from afar. Suddenly Mephisto stepped to the side and fired a cold ball at Yoga_Instructor. With very low cold resistance it one-hit-killed her, ouch.

Decided not to rejoin this tournament, I'm thinking a single entrant to most is better with maybe two if I do really well the first time. Dying in Normal is not what I consider "doing well".

Thursday, October 2, 2008

Diablo II: Emperor's Clothes Tournament

A lot of the tournaments of the SPF at diii.net revolve around either skill or item restrictions. The Emperor's Clothes tournament by Merlin is an item restriction only contest. The basic idea is that items dropped by Super Uniques and Act Bosses are the only items that may be worn, normal monster drops are not allowed. White items may be worn until a suitable replacement is found.

The tournament was both very frustrating and enjoyable. The challenge of making a viable character with limited equipment was quite interesting. Thankfully skills were not very restricted, the only thing not allowed was summonable minions, so builds like the Fishymancer and Summoning Druid were automatically out. The frustrating part came when normal monsters dropped the best items, while SUs dropped Isenharts cases. However this was considered and one of the rules of the tournament was that the personalization quest (Act V) could be used to make a normal drop usable.

In this tournament I entered one character, Enkidu. He was a Teslafroster, a build I've never tried before. Ended up being quite safe, but still had his share of NDEs. I'm not sure I'll enter another character here or not. I have a few personal builds I want to make in Softcore outside of tournaments and then maybe I'll try my hand in another one.

Java: Hotline Update #7

Another round of changes was made to the Hotline program today. This round was exactly the same as before, except that this time the PPC Changes option was removed and replaced with an iPhone option. Process was identical to before.

The only change came from the fact that this was done in the month I wanted changes to take place, rather than before the reps were able to use the program. As a result I had to move all of the data created yesterday out of the program and re-enter it under the correct date and representative's name to ensure the accuracy of the application.

Wednesday, October 1, 2008

Java: CharSi Update #9

It turns out an array of arrays was the best way to contain all of the information needed for the Runeword Wizard. This allowed me to use For and While loops for any comparison purposes as I had an array for all of the selected options and then compared each slot to its corresponding slots in the array of arrays. Somewhat of a brute force method but I'm satisfied with the results.

To start off I needed to create the main variable of this program, the array of Strings that would hold all of my selection choices.

String[] selectionArray = {"", "", "1", "0", "2", "1", "0", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"};

There are 58 slots to this array, one for each rune, base item and search modifier. A value of "1" equals true while a "0" equals false. All runes are initially selected while the base items are not. As components are selected their corresponding Listeners will alter the necessary value in this array. Along with the selectionArray, a separate array was created for each possible runeword, of which there are eighty-three. To that end there were quite a few arrays that looked similiar to this:

String[] heartOfTheOak = {"heartoftheoak.txt", "Heart of the Oak", "1", "0", "4", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "1", "0", "0", "0", "0", "0", "0", "0", "1", "0", "0", "1", "0", "0", "0", "0", "1", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "1", "0", "0", "0", "0", "0", "0", "0", "1"};

After creation each array is then added to a slot in main runeword array to create the needed array of arrays. This becomes key when doing the actual comparison between what is needed and the runewords available. The workhorse of this program is a method named CompareRunewordCriteria(). This method is called when the Display Jbutton is pressed. To start it sets a boolean variable to false, assuming the runeword won't fit the criteria given. Then it compares the base items needed with those selected, if there is a match then the variable is set to true, if there isn't a match then we move on to the next runeword. Then runes available are compared to those needed, as well as if the runeword has the right number of slots, contains an aura and all the other selection criteria are compared. If after all that the boolean variable is set to true, then the runeword name is added to the DefaultListModel so that it is displayed as an option in the JList component.

That was the hard part. After that it was simply hooking up the JList component Listener to display the right text file when an option in the JList is selected. The code for displaying the text was borrowed from the AMAS Rune panel, as was the text files containing the runeword information.


After everything was in place I did run some comparisons between my program and the online runeword calculator to ensure my results were accurate. A few changes had to be made, I apparently didn't consider all weapon types when melee weapons are concerned. Also Mauls were removed as a selection since those are incoporated into the Hammer option and Daggers were put in place instead. When originally thinking about daggers I assumed one socket was all they could have, which turned out to be incorrect. But a few quick variable name changes and daggers are now an available option.

This Runeword Wizard now replaces the runeword list from the AMAS program as this one is much more robust. I can search on specific runes and it provides a much larger pool of available base items beyond the four originally available (shield, helm, armor, weapon). Gradually I'll be phasing AMAS out of use, but I don't see doing so for quite a while as I want to finish the character simulator portion of CharSi before adding any other reference tools to the program.