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:
- Call a core function
HarvestResource()to see if you strike any resources, and the base amount that you receive.
- Roll a 1d100 (a 100-sided die)
- 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.
- Roll another 1d100
- Calculate your harvesting skill divided by 5, plus 35.
- 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.
- 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.
- Then you roll 1d155 and compare that number to the difficulty ratings in the ore definition file.
- 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.
- 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:
- (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.
- Determine which ores are actually present in the given area that the player is trying to mine. Make a list of these.
- Take the list from step 2 and remove all the ores that the player is not skilled enough to harvest.
- 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.
- Imagine you have a stack of plain white paper, like you would use in a printer.
- Take one piece of paper at a time and make a single dot on each page with a pen or pencil. Make the dot in a random place on each piece.
- Now imagine you are a really great artist (I'm not, but maybe you are) and you gradually shade the piece of paper with your pencil, getting lighter and lighter as you move away from the dot you just made. In every direction you uniformly get lighter at the same rate.
- At some places you'll hit the edge before you get to fully white. At some other places you'll hit fully white well before the edge.
- Now label all the pieces of paper with a different ore, starting with iron and moving on up to Nimbus. Now put them all back into a stack.
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?
- Now imagine that your piece of paper is the shape of Britannia.
- Now imagine that the server moves the virtual dots around on the virtual pieces of paper, so that concentrations of ore will actually drift (very slowly) over time.
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:
- It creates an opening where people can play the market. Maybe Lavarock (which grants protection against fire damage) is super rare right now, but you've been stockpiling it for weeks. Time to sell it to people grinding fire elemental lords at a hefty premium.
- It creates more incentive to go out and "hunt" for good resource spots instead of everyone just macroing AFK in Minoc mines. * It might be far more profitable to mine on one of the random mountainsides near Skara Brae, or inside Despise. Then again, it might not. Players have to go discover by themselves.
- It also creates a market for those same spots. I'll sell you a rune to a great spot for mining Ebon Twilight Sapphires for fifty thousand gold pieces.
- By the same token, PKs can go out hunting miners, and the players scouting mining locations. This creates additional chances for random "field pvp" to occur and makes the game exciting.
Coupled with some other changes we've got planned for crafting, I think this will really open up that side of the game.