Let's face it. UO's crafting is simplistic and not super fun. You double click your hammer, double click the ore, click some menus, clank clank clank, and you've got a new Peachblue platemail gorget. When you mine for ore, or chop wood for lumber, the game pretty much just checks your gathering skill against a list of "thresholds", one for each resource. As your skill grows, so does the list of ores that you can gather. OSI's implementation involved hitting "veins" of various ores. If you hit an iron vein, that's all you'd get until the vein despawned or was exhausted.

The implementation in POL (and thus original Zulu Hotel) was at once more simplistic and more complicated. In my old POL093 copy I found lying around which appears to be based on ZH Scandinavia, it goes something like this:

  1. Call a core function HarvestResource() to see if you strike any resources, and the base amount that you receive.
  2. Roll a 1d100 (a 100-sided die)
  3. Compare that dice-roll against a list. If you roll something like 93 or above, you get the special gems like Radiant Nimbus Diamond. If you roll 4 or less your tool breaks.
  4. Roll another 1d100
  5. Calculate your harvesting skill divided by 5, plus 35.
  6. Check the number from step 5 against the roll from step 4. If your step 4 roll is less than the result of step 5, you get coloured ore. Otherwise, you get iron.
  7. Assuming you are getting coloured ore, then you calculate the maximum amount of gatherable ore by dividing your mining skill by 30, and rounding down. Double that if using an Omero's.
  8. Then you roll 1d155 and compare that number to the difficulty ratings in the ore definition file.
  9. Assuming the player can actually mine it, then you multiply that value from step 1 by a bunch of things including the tool bonus from Omero's/Xarafax and also from being a spec crafter.
  10. Oh, also you get double ores if you are spec.


Why not strive for a solution that's at both more elegant and more extensible? The system we're building will do the following:

  1. (When writing the server) Give each ore/log/whatever an Abundance rating that describes how rare it is. Iron has a very high abundance. Nimbus has a very low abundance.
  2. Determine which ores are actually present in the given area that the player is trying to mine. Make a list of these.
  3. Take the list from step 2 and remove all the ores that the player is not skilled enough to harvest.
  4. Take the list from step 3 and normalize the abundance ratings so that they add up to 100%.

Now it's a simple matter. If you're standing in Minoc Mines, and the normalized abundance rating of Dripstone comes out to 36%, then you will receive Dripstone ore approximately 36% of the time at that location.

Why is this better?

If it ain't broke, don't fix it, right? Well, okay, the system from POL isn't broken per se, but it's not easily maintained or altered. A simpler system lends itself well to expansion. Here's a little thought experiment.

What you have now is a series of layers, not unlike a photoshop document. Each layer describes the abundance of the resource. So an inch away from the dot you made initially, you might be at 60% darkness. That particular piece of paper is labeled "pyrite". So Pyrite ore is 60% abundant at that particular spot. Make sense?

At server birth you might be able to strike Goddess ore in Minoc mines, but a few months later Goddess might be very rare. It might be possible to find a location where only Nimbus or New Zulu is abundant in any significant numbers. That means as long as you are skilled enough you would get Nimbus or New Zulu every single time.

What are the gameplay implications?

In my mind this system has a lot of potential upsides, some of which are:

Coupled with some other changes we've got planned for crafting, I think this will really open up that side of the game.