Friday, May 30, 2008

Java: DII Character Simulator Update #5

This project got put on hold due to lack of time once Gorny sucked me into playing the online game Travian with him and bunch of other people from the Diabloii boards. Thankfully that game is over and I can get back into working on this program again, however it took a while to reacquaint myself to the methods, variables and structure of the current code.

I had planned on finishing up the Skill calculator tab so that is where I started. It turns out there aren't any easy equations for how the skill damage/stats are governed, which makes my job a bit harder, and a little tedious. Instead I had to create a separate text file for each skill and list the variable stats for each level in the file.


This was the tedious part, as there are seven classes with thirty skills each and I went up to level twenty for each skill. So say around forty-two hundred columns of data needed to be generated. Thankfully there is an online version of the skill calculator that I use to view the needed information and transpose it into text format. Granted it's an "illegal" version according to Dii.net standards, but the information is accurate and I like the way it's displayed.

While that was the tedious, non-coding part there was also some real coding that went along with the text files. Specifically I needed a way to gather the information from the files and store it in the program for use in calculating skill stats per level when I make my own equations. In order to do this each skill needed it's own float array, one row for each variable stat.

float[] magicArrow = {0, 0, 0, 0};
float[] guidedArrow = {0, 0};
float[] immolationArrow = {0, 0, 0, 0, 0, 0, 0};


And so forth. The trick is recalling which row corresponds to which variable stat, and for this I had to create a set of cliff notes for each character class. Whether or not those files will be incorporated into the final product is up in the air at this point.

Now that there is somewhere to store the information a pair of methods were created to do the actual storing procedure.

public void FillSkillArray(String file, String location, int number, float array[])

This is the workhorse method and will open the associated text file, find the correct column depending on what value the skill has been given (int number) and then save the information into the corresponding float array. Every time a skill value is changed the entire set of skill stat arrays are repopulated. Since this is only populating thirty arrays it isn't time nor resource intensive. The second method simply calls FillSkillArray for each of the thirty skills at all once.

Now with the skill information being saved successfully we need a way to display this information. I see this happening in two parts. The first part will be a method that generates the correct stat amounts depending on synergies and such; one method for each skill. Then to actually display this information I was planning on using a Tip Tool on the label of each skill. While I haven't researched this yet I'm hoping simply hovering the mouse over the skill's label will display the bonuses given or damage done as calculated by the associated method.

I will need to add a few variables for use in the calculation portion that will take into account +skill mods from equipment. For now those will all have a value of zero but it is better to incorporate these variables into the program early than try to do so later on.

Wednesday, May 28, 2008

Java: Hotline Update #5

The only update required was to add the name of the new Customer Service representative so that she could utilize the program. This required me to add a new variable to the repString String array so that her name appeared in the JComboBox drop-down menu. Along with this changes were also made to the ReportPanel file. A new variable was added to the repNames and techNames String arrays along with the corresponding JRadioButton for selecting the report type. Other than this the only necessary changes were updating the Listeners to incorporate the new variables and increasing the int variable that keeps track of the number of represntatives, for use in For and While loops.

Tuesday, May 13, 2008

Travian: The Finale

The International speed server ended after almost six months of activity, I played for the last five. I ended up ranked around 400th overall, 400th in offense and 1100th in defense with the alliance as a whole ranked 60th. Granted those are extremely impressive numbers but considering it was my first full server with little or no veteran direction not too shabby either.

Travian is a very time consuming and addictive game. The game starts off with a single village that needs to be micro managed in order to gain an advantage over any neighbors. From there the village needs to be micro managed to ensure raiding parties don't run away with resources before they can be used or wipe out your growing army. Once a second village is created the micro management continues as the second village needs to be grown as fast as possible, and so on and so forth. Basically the micro management doesn't really stop

Our group decided to relocated to a distant part of the map away from the central area that was sure to turn into a massive battleground. We wanted time to understand how Travian worked before someone tried to wipe us out. For the most part the plan was successful. We did end up settling near some other players, who harassed us in the beginning until we grew too large for easy raiding.

We eventually joined an established alliance named TRoS (The Ring of Steel) and became their wing. This was as much for our own protection as it made things a bit more interesting. Turns out this didn't help us as much as expected due to the distance the rest of the TRoS folks were from our area and their poor communication skills. The people themselves were very nice and fun, but planning anything with them turned out to be pretty much impossible. As a result we were pretty much on our own for the whole server, which meant we could do whatever we wanted.

We cleared all enemies out from our area one at a time, starting with those that were not part of any large alliances. Slowly but surely we got the hand of coordinating attacks and could wipe out several enemy villages in a single day. The only thing that slowed us down were the several hour travel times to opposing villages, each way. I can't imagine what a normal server would be like with 1-2 day travel times for close opponents.

While the game was fun to play in the end it just became too much to handle. One by one members of our group dropped out due to boredom or simply lack of time so we ended the game with about five active people, out of the twenty-eight or so who started. Myself I simply stopped trying to manage my 31-32 villages and let warehouses overflow with resources and offensive troops remain idle for long periods of time.

In order to play this game successfully one needs to be in front of a computer for long periods of time and not have to worry about being in trouble for playing a game. Logging in 2-3 times a day simply doesn't cut it and won't allow much growth, you'll be left in the dust by all of the other players.

Basically it was fun but too time intensive, so I won't be playing another server round. I enjoyed the round I did play but were I to play another online game it would have to be turn-based as opposed to time-based.

Sunday, May 11, 2008

Diablo II: Frost Maiden Skill Layout

A Frost Maiden is a ranged Amazon fighter that uses Freezing Arrow to vanquish her enemies. The skill setup is as follows:

Critical Strike - 1
Inner Sight - 1
Dodge - 1
Cold Arrow - 1

At level six Cold Arrow becomes available. It will have to be used sparingly as the mana cold is fairly high. However monsters at this point can still be dealt with by using starting gear, or anything picked up along the way. Bosses are the only monsters that require skills to be utilized.

Cold Arrow - 7
Avoid - 1
Slow Missile - 1

At level twelve Cold Arrow has become much more deadly and while it is still used sparingly, makes short work of any monsters it is used on.

Cold Arrow - 11
Ice Arrow - 1
Penetrate - 1

At level eighteen Ice Arrow becomes available. Only one point will be placed in this skill. While it is a synergy of our eventual final skill Freezing Arrow, it only gives a bonus to the cold length of the skill. Since length is nerfed in Hell it is a waste of skill points to use Ice Arrow for that function, instead charms and +cold items are obtained (Ravenfrost) as each separate item adds to the cold length time. However even with one point, Ice Arrow is extremely useful in Normal to freeze monsters in their tracks so they can be dealt with easily.

Cold Arrow - 16
Evade - 1
Decoy - 1

At level twenty-four Cold Arrow has become the weapon of choice to deal with any monsters, so mana is an issue that needs to be managed constantly.

Cold Arrow - 19
Freezing Arrow - 1
Pierce - 1
Valkyrie - 1

At level thirty all of the main skills become available. Freezing Arrow replaces Cold Arrow as the skill of choice due to it's splash damage. The Valkyrie provides an excellent, resummonable tank to keep monsters away from the player character and Pierce provides the opportunity for Freezing Arrow's damage to multiply against packs.

Cold Arrow - 20
Freezing Arrow - 20

By level forty-seven the damage of Freezing Arrow has been maximized and the player is cruising through each level. Mana management is a constant concern however so FA cannot be used against all targets and a regular attack must be used, along with allowing the mercenary and valkyrie to deal with many of the monsters while they are frozen by FA.

Valkyrie - 20

At level sixty-five the valkyrie is maximized and provides the most durable tank possible in the game. This takes much of the heat off of the mercenary and allows him/her to require far less resurrections. Also at this point the character is completed with her main skills. Now it is time to choose a backup skill.

There are two options, Magic Arrow or Immolation Arrow. Magic Arrow requires an additional 19 points and is completed at level seventy-nine, while Immolation Arrow requires an additional 21 points and is completed at level eighty-one. Each has it's desired points, however I suggest Magic Arrow as the better backup skill. When maximized MA requires zero mana and also does not use a physical arrow, so it can be fired indefinitely. This comes in very handy when mana has been drained or when an arrow supply is limited, such as the Ancients battles.

Items with plus skills are extremely helpful due to the scaling factor of the cold skills and the need to increase some of the utility skills that receive only one hard skill point, such as Pierce. A high damage bow is a necessity to allow MA to be a viable backup skill, otherwise the player will be relying heavily on the mercenary and valkyrie to deal with all cold immune monsters.

Friday, May 9, 2008

Diablo II: No Vitality Tournament Part II

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.

This is my second attempt at this tournament, the first was Bob the Fishymancer who was successful in becoming a Guardian. For the second attempt I created Atropos, who was to become a Frost Maiden. The idea of Frost Maidens is that they use Freezing Arrow to deal with most of their enemies. A backup skill is necessary for cold immune monsters, and I chose Magic Arrow as this backup. As it turns out MA was very underpowered due this being an untwinkled tournament and my bad luck at finding a decent bow. So I had to rely on my merc and valkyrie to deal with such monsters.

Still Atropos was successful in defeating Baal in Hell and become my second Guardian. I won't go into detail as to her journey, the Guardian thread already has all that information.

As with Bob, I'm not sure what to do with her next. Frost Maidens are not very good magic finders and cold immune monsters are present in most of the normal places I could run, such as the Pits or other level 85 areas. Since I'm not much of a HC fan outside of tournaments I'll probably leave her be. Still, with two done I intend to play the other five classes in all upcoming tournaments to eventually get one guardian of each class. That is a very, very long term goal considering how many of my tournament characters have even gotten to Hell difficulty, much less completed it.