Sunday, December 16, 2007

Diablo II: Matriarch Nemesis

Nemesis is a recreation of a martial arts assassin I had started both on Battle.net and Single Player but never finished. On Bnet I quit and moved to SP, and on SP I restarted before I finished. As a result I've never even gotten an assassin into Hell, such an oversight had to be corrected.

As can be expected Normal was a bit difficulty to begin with, but once Tiger Strike was maximized the questing was fairly basic. Tactics weren't really required yet, even untwinkled. I did however have great difficulty once more skills became available. Up to this point I've always utilized the F* keys for my skills as normally I use no more than six skills overall. However for an assassin this simply wasn't possible. As a result I had to bind the A-S-D-F-Q-W-E-R-T keys, as I was finding myself getting more and more frustrated by the fact I couldn't select the needed skills quickly enough. Obviously this lead to some confusion for a while right after the switch trying to use potions, as my hand was in a different location. I can attribute a few Normal deaths to this issue.

Nightmare on the other hand, wasn't quite as easy as expected. A trip into the Blood Moor lead to a triple boss pack that killed off my poor barbarian mercenary and shadow master almost instantly and required lots of running around and trips back to town for potion restocks before they were eliminated. The mods weren't very dangerous, it was the cold damage the undead inflicted that was the problem. Being slowed simply didn't mesh with how Nemesis was intended to be played. So I muled on a pair of 20% faster attack speed gloves and a Ravenfrost ring to correct that issue.

Afterwards progress was fairly good. Charge-ups were used everywhere, no more normal attacks. The most dangerous monsters were either manaburn or undead, due to the inability to leech from them. Up until Act IV the normal packs were manageable, as were the act bosses. Duriel required some thawing potions as Nemesis still has zero, well now -30%, cold resistance. Duriel was also the only act boss to require a trip back to town to restock on health potions, both Andariel and Mephisto were easily dealt with due to the ability to leech from them.

Act IV lead to more problems due to the ramped up health/damage of the monster packs. Just stepping out of the staircase lead to a doom knight boss pack (extra fast, cursed) that killed Nemesis at least five times. They were accompanied by a few pit lords that took three sets of charge-up and release cycles to kill a single one. The weapon/boots Nemesis had were simply
lacking enough punch to deal with the monsters. So a few more items needed to be muled on; Gore Riders and a Bartuc's Cut-Throat. Afterwards Nemesis was able to deal with the monster packs, it still wasn't a breeze but manageable.

At arriving at the Chaos Sanctuary she realized something, Cloak of Shadows apparently doesn't affect Oblivion Knights, as they kept cursing her. This lead to several deaths to IM before the player settings were dropped to one for the rest of the level. The same held true in the WSK against the Oblivion knights that spawned there as well. Lovely. Ended up with a nasty roll for the 3rd level, Revivers coupled with a level simply full of Gloams. It was just plain silly, but being stubborn I refused to reroll the map, and died several times as a result.

Finally Hell was reached, which means Nemesis can be twinkled up to her eyebrows, and she was: helm, armor, rings, amulet, belt and a second weapon to join the twinkled main weapon, boots and gloves already present. After that she simply ran, literally, through Hell. With all of the bonus skill points given by equipment Nemesis had Burst of Speed up to a very respectable level, too much actually. Took quite a bit of getting used to how fast she could move.

One thing that did cause problems is the fact that more often than not I could not see how many light balls were circling her feet. This became a problem when using Phoenix Strike, I had no idea which elemental attack was going to be released. This lead to many of them being wasted due to being directed on immune monsters, but also to 17 skill points being unused at the end of the game. Since I couldn't control which element to release I didn't want to use the points in synergies when a need may arise for them later. No need arose however so I think I'll dump them all into Blades of Ice, since the last charge is a little easier to control even if Claws of Thunder was my first choice when planning the character.

Nemesis didn't encounter any terrible problems until the Chaos Sanctuary in Act IV, due to the Oblivion Knights and IM. Since Cloak of Shadows doesn't affect OKs she struggled greatly in this area and received her first death in Hell, then several more followed close behind. This was a signal for things to come in Act V, as in the Bloody Foothills Nemesis and her companions were greeted with hordes of ranged monsters. Cloak of Shadows was used liberally to allow Nemesis to clear out small packs at a time. Going was slow but steady until the Ancients.

The Ancients had a dangerous set of mods. Talic (Whirlwind) was extra fast and spectral hit enhanced while Korlic was extra fast and stone skin. Of course both of them zeroed in on Nemesis and completely ignored her companions. This resulted in several minutes of her running around (with BoS enabled) with both hot on her heels. Since they were just as fast splitting up the Ancients simply wasn't possible, so hit and fade tactics had to be used to eliminate Madawc first and then corner Talic and Korlic behind a pillar where they couldn't see Nemesis. At this point they engaged Alhizeer and the Shadow Master, mostly the Shadow Master. This was good as Nemesis had run out of purple and red potions by this point.

Eventually they fell, then the WSK gave an extremely challenging combination of monsters to test Nemesis' skill and courage. Level 1 was easy, level 2 had Souls and Snakes, level 3 had Oblivion Knights and level 4 was fulled with Souls, Hell Witches and Death Lords. The last level was virtually unfair, fighting cursed with Amplify damage constantly against multiple bosspacks and champion packs of Death Lords, who in my opinion are the most dangerous melee monsters in the game.

Needless to say many mercenary resurrections were required, but eventually Baal was engaged and defeated, even though he felt his clone needed to remain a constant companion. Nemesis used a little trick to deal her damage; she charged up on the festering appendages that Baal kept summoning then released their charges on Baal himself. Since she had issues hitting Baal this was the only way to drop the Lord of Destruction.

Stats:
Level 81
Strength - 94(161)
Dexterity - 86(116)
Vitality - 295(305)
Energy - 25(35)

Life - 1095(1267)
Mana - 145(184)

Lightning Resistance - 75
Fire Resistance - 75
Cold Resistance - 75
Poison Resistance - 75

Skills:
Tiger Strike - 20(29)
Phoenix Strike - 20(29)
Dragon Tail - 20(29)
Dragon Flight - 1(10)
Fade - 1(7)
Shadow Master - 1(7)

Equipment:
Weapon 1: Bartuc's Cut-Throat (Shael)
Weapon 2: Jade Talon (24% CR jewel)
Armor: Duriel's Shell
Boots: Gore Rider
Belt: +15 Strength, FR 25%, LR 25%, 24% FHR, PLR 25%
Gloves: PR 25%, 20% IAS, +2 Martial Art skills
Helm: +18 Resist All, 6% Mana steal, +2 Assassin skills
Ring 1: +7 Strength, +22 Mana, LR 28%
Ring 2: Nature's Peace
Amulet: The Mahim-Oak Curio

Mercenary (Holy Freeze Desert Warrior):
Helm: Tal Rasha's Crest
Armor: Shaftstop
Weapon: The Reaper's Toll

Hellforge
NM: Um
Hell: Hel

Thursday, December 6, 2007

Diablo II: Pindlethon IV

A Pindlethon is an event run about once per year in the SPF. The basic idea is that each participant kills Pindleskin two thousand times during the month long event. Each elite unique and set item is considered a qualifier and those numbers are tracked. The participant with the best 5 items wins. Normally the top few players get to take an item or two from those below them, but that was left out of this Pindlethon. That was something I don't mind too much since I found several grailers that I didn't want to lose, and since I'm self found if my some miracle I won I wouldn't be taking items from anyone.

Here's the loot I collected during my runs.

#5
Spirit Ward
Ward
Defense: 446
Chance to Block: 69%
Smite Damage: 11 to 35
Durability: 67 of 100
Required Strength: 185
Required Level: 68
Item Version: 1.10 Expansion
Item Level: 86
Fingerprint: 0xafc33759
+161% Enhanced Defense
+25% Increased Chance of Blocking
All Resistances +37
25% Faster Block Rate
+6 Cold Absorb
5% Chance to cast Level 8 Fade when struck

#4
M'avina's True Sight
Diadem
Defense: 210
Durability: 10 of 20
Required Level: 64
Item Version: 1.10 Expansion
Item Level: 86
Fingerprint: 0x67d2e9e6
+25 to Mana
+150 Defense
Replenish Life +10
30% Increased Attack Speed

#3
M'avina's True Sight
Diadem
Defense: 207
Durability: 19 of 20
Required Level: 64
Item Version: 1.10 Expansion
Item Level: 86
Fingerprint: 0x58423fc5
+25 to Mana
+150 Defense
Replenish Life +10
30% Increased Attack Speed

#2
Griswold's Valor
Corona
Defense: 270
Durability: 37 of 50
Required Strength: 104
Required Level: 69
Item Version: 1.10 Expansion
Item Level: 86
Fingerprint: 0x31e1bfa3
+63% Enhanced Defense
All Resistances +5
26% Better Chance of Getting Magic Items
Requirements -40%
+0 to Cold Absorb (Based on Character Level)

#1
The Cranium Basher
Thunder Maul
Two-Hand Damage: 130 to 624
Required Strength: 253
Required Level: 87
Mace Class - Normal Attack Speed
Indestructible
Item Version: 1.10 Expansion
Item Level: 86
Fingerprint: 0x2062bd2d
+25 to Strength
+236% Enhanced Damage
+20 to Minimum Damage
+20 to Maximum Damage
All Resistances +25
20% Increased Attack Speed
150% Damage to Undead
75% Chance of Crushing Blow
Indestructible
4% Chance to cast Level 1 Amplify Damage on striking

The rest of the finds:

Bloodmoon x2
Bonehew
Boneshade
Cranebeak
Demon Limb x2
Eschuta's Temper
Ethereal Edge
Gimmershred
Hellslayer
IK Stone Crusher
Lightsabre
M'avina's Embrace
Naj's Puzzler
Ondal's Almighty
Ormus' Robes
Rainbow Facet (3/3 lightning)
Trang-Oul's Guise
Wraith Flight

Best runes: Amn - Shael - Hel

It was a fairly bad showing on my part, as I didn't receive a single vote. A lot of that had to do with the fact I ended up with the second least amount of items of anyone who completed their run set. Runs took about forty-five seconds apiece, which is a bit long for such runs but I like to pick up many rare items looking for endgame gear so lots of extra time is taken identifying and selling items. However I did find several items I've never seen before, most notably M'avina's True Sight which gets me one item closer to finishing the set as well as providing solid equipment for my planned bowazons.

Wednesday, December 5, 2007

Java: DII Character Simulator Update #4

The rest of the groundwork for the application was completed with the addition of listeners to each and every JButton, JComboBox and JCheckBox. The equipment tabs were fairly simply due to how similar they are, the code was written for one and then copied to each other class file with only minor adjustments required. These listeners don't do anything yet as the methods that govern the program aren't written, but that is all that is required code-wise for this section.

As for the final stats tab, more than just listeners were added. Along with finishing up any needed listeners the entire page was reworked, specifically the skill display panel was removed. I decided that it was going to be a duplication of work as that same information would be available in the skill calculator tab, so doing it twice was unnecessary. Also, the layout of the final stats panel was a bit crowded, and this freed up the needed space.

Some functionality was added to the buttons and fields of this tab as well. Specifically:

Stat Points panel
  • Plus button has check to ensure points can't be added if no points available
  • Minus button has check to ensure points can't be removed if the base value is displayed
  • Points to Vitality increase the displayed life value
  • Points to Energy increase the displayed mana value

Button panel
  • Character name changed depending on which character type selected in the skills tab
  • Change in Difficulty Finished JComboBox increases the stat points remaining and resistance values
  • Change in character level JComboBox changes remaining stat point value as well as mana/life values

Mods of Note panel
  • The Blocking field was moved to this panel from the Damage/AR panel

Damage/AR panel
  • Blocking was removed
  • Attack rating and Damage fields for Undead and Demon were added

In order to track changes to mods, life, mana and resistances a trio of arrays were created that would hold any additions to these values.

static int[] resistance = {0, 0, 0, 0};
static int[] stats = {0, 0, 0, 0, 0, 0};
static int[] modsOfNote = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

These arrays will be present in each equipment class as well as the final stat class. When an action is taken that could possibly add to any of these values, whether it be adding a vitality point to a piece of equipment, the values of these arrays are summed and the result displayed in the appropriate JTextField.

The only fields that aren't attached to any methods or listeners at this time are the Damage/AR and Misc Mods panels. I'm going to wait until the rest of the program is in place before getting these panels working. This means the next step is to finish the Skill Calculator tab by locating the necessary equations for calculating the skill values and implement a way to view skill bonuses in that tab.

Tuesday, November 27, 2007

Diablo II: Necromancer Summoner Skill Layout

Also known as the Fishymancer, a Necromancer that uses summons to fight is a typical build in Diablo II. There are many variations of such builds; relying on just skeletons, golems or revives. Personally I want as many meat shields as possible for the character, so a combination of all three is used. The skill setup is as follows.

Raise Skeleton - 20
Skeleton Mastery - 20
Raise Skeletal Mage - 20
Corpse Explosion - 20
Summon Resist - 1
Decrepify - 1
Revive - 1
Attract - 1

As well as a single point in all of the prerequisites. I like to provide a breakdown of when each skill point is allocated.

Raise Skeleton - 2
Amplify Damage - 1
Skeleton Mastery - 1
Clay Golem - 1

At level 6 the character will have three skeleton warriors (1 due to starting wand) and a clay golem to deal the necessary damage. This isn't enough to progress quickly, so the character will be engaging in melee combat for the beginning portion of Act I. Monsters are first cursed with Amplify Damage and then engaged in combat.

Raise Skeleton - 7
Golem Mastery - 1
Raise Skeletal Mage - 1

At level twelve the character has four skeleton warriors, one clay golem and a skeleton mage for company, along with the mercenary. The character will still need to engage in melee combat, but the burden of engaging mobs is no longer present.

Raise Skeleton - 9
Skeleton Mastery - 5

At level 18 the character is ready to take on Andariel, with an additional skeleton warrior. The points in Skeleton Mastery will make the summons strong enough to withstand a few hits by Andariel so they don't crumble instantly. Luckily there are always several carver packs right near her, so resummoning any defeated minions is simple.

Raise Skeleton - 12
Weaken - 1
Terror - 1
Summon Resist - 1
Decrepify - 1

At level 24 Decrepify becomes available, which will be used against all act bosses from here to the end of questing. Decrepify, along with a clay golem, will slow the boss down to such a point where they are dealing very little damage to the summons. An extra skeleton warrior is also obtained, giving a total of 9 companions for the character. At this point the character doesn't need to engage in melee combat and can instead sit back cursing monsters and picking up items while the summons do the dirty work. Duriel should be extremely easy to overcome.

Raise Skeleton - 20
Skeletal Mastery - 20

The next objective is to maximize Raise Skeleton to have as many minions as possible. To that end equipment with +summon skills mods are highly sought after. Shopping for wands is advised, as is using the imbune quest reward from Act I on a necromancer head (shield). By the end of the first difficulty level the character has reached level 45 and has at least nine skeleton warriors, one skeletal mage, one clay golem and a mercenary at their disposal.

Bone Armor - 1
Blood Golem - 1
Iron Golem - 1
Revive - 1
Dim Vision - 1
Confuse - 1
Attract - 1
Teeth - 1
Corpse Explosion - 1

Up to level 52 the utility skills are obtained, each will only receive a single point overall and allow plus skill mods on equipment to provide any additional bonuses, except Corpse Explosion of course. However Corpse Explosion will not receive any additional points quite yet. Normally Normal and Nightmare are run at 'players 8', so CE has limited effectiveness due to it's damage not scaling accordingly. Therefore it will only be used as a body disposal skill for reviving monsters.

Raise Skeletal Mage - 20

Next comes mages as minions. They are not anywhere as useful as skeleton warriors due to their lower Hit Points and damage output. However the character can have as many of them as warriors and they can easily act as extra meat shields to keep the monsters off of the player character. Along the way it is suggested (if RWM) to obtain an Insight polearm for the mercenary (Act II Might, NM). Revives are going to be used and they are very mana intensive and require constant recasting, so to avoid stockpiling mana potions the Insight will solve all mana issues immediately. It's only a suggestion however, Insight is not critical to the character's success, but it does make managing 10+ revives much easier.

Corpse Explosion - 20

At level 69 all summon skills are finished and work can now begin on Corpse Explosion, which should take until level 83 to maximize. It is assumed that in Hell the player will lower the settings to 'player 1 or 3', which will make CE an extremely effective mob killer and speed up the character's progress exponentially. Normally when entering Hell the character will have the ability to summon 11-12 warriors/mages, a clay golem and 8-10 revives, along with the always present mercenary. The player character shouldn't be injured very often. The monsters to watch out for are Black Souls (piercing lightning attack) and Slingers (piercing physical attack). Also reviving monsters should have their corpses exploded, otherwise it is very likely monsters will be revived behind the lines right next to the character.

No pieces of equipment are vital to the success of this character. A general rule is that +skill pieces are more desired over resistance providing equipment. With the amount of friendly minions in the game, any elemental attacks will be absorbed by them long before they reach the player character (except Black Soul lightning of course).

Monday, November 26, 2007

Diablo II: No Vitality Tournament

The concept of the No Vitality tournament is simple, no stat points are allowed to be placed in vitality at all. This is the only restriction. Equipment and charms that add to life or vitality are fine to be used at any time. For obvious reasons equipment with +life/vitality mods are highly sought after.

Regardless of which character is chosen life will be an issue, so I decided on a non-melee character to ensure a decent showing in the tournament. The character would be the same as my All Alone character, a summoning Necromancer. That character wasn't anywhere near as boring as I thought it would be, so I wanted to try again and see how far I could go. I expected this character to be a bit easier due to the mercenary being available to get the army started. The main problem was going to be balancing +life and resistance equipment to ensure survivability. I think I did fairly well in that regard.

As it turned out this Fishymancer, named Bob, became my very first Guardian. I won't go into depth on what happened while questing, I did that quite fine in my Guardian thread in the SPF.

I don't play Hardcore outside of the SPF tournaments, so I'm not sure what to do with Bob. Most likely he'll just sit there as a reminder that I can actually solve the game without dying eight thousand times. Some incentive to play smarter is always nice.

Wednesday, November 21, 2007

Java: DII Character Simulator Update #3

I started to attach JTextFields, JComboBoxes and so forth between the different tabbedpanels. While doing so it started to get quite confusing as to what variables needed to be modified when a component's value changed. There was quite a bit of references between tabbedpanels and at this point I had to stop. I had plans of separating the Skills panel into seven separate panels, one for each character type. Since I was starting to reference variables from the Skills panel for the Stats panel, that separation had to be done before anything else.

This was not simple by any means. Each character received a variable in the Skills panel that is called when the corresponding value is chosen in the JComboBox for character selection. Originally I wanted to simply have these character panels extend JPanel and create a panel that is automatically added to the main program. As it turned out, an easier way was to pass a panel from Skills to the character sub-panel and allow that panel to be the framework for the character skill display.

After that is was simply a matter of copying the first character panel into 6 more copies and changing a few variable names. Along with this the Save button that was initially used to populate the characterField JTextField in the Stats panel was removed. The logic behind the button was Incorporated into the character panels. This lead to a new problem, a NullPointerException error occurs when the program is launched. NullPointerException occurs for one of a few reasons:
  • Calling the instance method of a null object
  • Accessing or modifying the field of a null object
  • Taking the length of null as if it were an array
  • Accessing or modifying the slots of null as if it were an array
  • Throwing null as if it were a Throwable value
In this case the second option was the culprit. The Skills panel is initialized before the Stats panel and Skills is giving the Stats variable characterField a value. It would have been possible to remove characterField from Stats and initialize it in Skills instead, but since that variable has nothing to do with the Skills panel that was avoided. Instead the solution was to change the order of the tabbedpanel creation. Stats would be generated first, followed by Skills and then lastly by Equipment.

With that out of the way the listeners for all 210 JComboBoxes in Skills had to be created and then linked to associated int arrays to store the selected data. While time consuming, it wasn't extremely difficult to do. In the end I was also able to put in checks to ensure that a skill wasn't assigned points if it's requirements did not already have points assigned. If that is the case an error message is generated.


This basically finished off the groundwork for the Skills tab. All that is left is to locate the equations that govern each of the 210 skills and create a separate method for each. These equations must be stored somewhere, I'm hoping the good folks at Diabloii.net will be able to point me in the right direction. I'm hoping it is an equation that drives each skill. If not then I'll have to store each skills values in an array of arrays and then create my own equation to generate the necessary information.

Once this is done I'll have a standalone skill calculator ready to go.

Tuesday, November 6, 2007

Java: DII Character Simulator Update #2

The third and final piece of the GUI for the character simulator is completed. This won't be the last page to be made, but for the initial application attempt this will suffice. Thanks to the lessons learned making the Equipment tab the format was much easier to setup with the GroupLayout manager.

I took the LCS of the Diablo II program as a template and then added any information I felt was necessary for display purposes. The first few subpanels were fairly basic, the Misc mods, Mods of note and Resistance panels were for pure display purposes. It was the other panels that required extra components.

Originally I was going to create the Stat panel with JTextFields and have the user enter in the amount of points to add to each characteristic, then a "Calculate" button would need to be pressed to add the needed info. This unfortunately didn't take into account removing points as a user played with the virtual character's setup. So instead I followed the setup of the LCS and used buttons, one plus and one minus, for adding/subtracting stat points. GroupLayout was of course utilized to arrange the JLabels and JButtons into an appropriate order.

This was however only part of the subpanel. There was also the display of the sum of remaining stat points that needed to be added. The subpanel was actually governed not by GroupLayout but by BorderLayout with the GroupLayout section in the center and a FlowLayout in the southern portion containing the JLabel/JTextField combination that displays remaining stat points. The same layout setup was used for the Damage subpanel, with its JComboBox for skill selection component taking up the southern portion of the subpanel.

The last subpanel to be added was the Skill Info section. It occurred to me that there is not a place in the Skill Planner tab to view the properties of each of the skills once points have been allocated. I could have placed a JTextArea at the bottom of the page with this information, but I thought that would ruin the layout of each page. So this feature is added to the Stat panel instead, so that damage and effects of each skill may be viewed, taking into account bonuses from the equipment the virtual character is wearing.


This completes the first phase of the application's development. With the GUI completed I can now begin work implementing listeners and functionality to all of the JComboBoxes, JButtons, JCheckBoxes, JTextFields and JTextAreas. There is a limited amount of pieces that can be tied together before data is required, but as much as possible will be implemented.