Let’s Program A Compression Algorithm Part 2: In Which A General Idea Becomes A Specific Algorithm

Last time we talked about Alice in Wonderland and the deep cruelty of stores that play the same handful of movie trailers on endless loop.

More importantly we also talked about how computers use compression to shrink files down for easier storage and faster transfer. Without good compression algorithms the Internet would crawl to a halt and half the electronics you use on a daily basis wouldn’t exist. For instance, without compression a 2 hour HD movie would be over 300 GB; good luck fitting that all on one disc!

To better understand this vital computer science breakthrough we’re going to be writing our own ASCII text compression program.

Disclaimer: It’s not going to be a very good compression program. Like all of my let’s programs the goal here is education and not the creation of usable code. We’re going to be skipping out on all the security and error checking issues a professional compressor would include and our end goal is a modest 20% reduction in file size compared to the 75%+ reduction well known tools like Zip can pull off.

Now that your expectations have been properly lowered let’s talk about the structure of text files. After all, we can’t compress them if we don’t know what they’re supposed to look like or how they work.

The ASCII text standard is a set of 256 symbols that includes all 26 letters of the English language in both upper and lower case as well as all standard punctuation, some useful computer symbols (like newline) and a bunch of random symbols and proto-emoticons that seem like they were included mostly to fill up space.

The fact that there are 256 symbols is very important because 256 is exactly how high you can count using a single 8-bit computer byte. That means you can store one letter in one byte by simply using binary counting to mark down where the letter is in the ASCII chart.

For example, the capital letter “A” is in spot 65 of the ASCII chart. 65 in binary is 01000001. So to store the letter “A” in our computer we would grab a byte worth of space on our hard drive and fill it with the electronic pattern 01000001.

An ASCII text file is just a bunch of these 8-bit character bytes all in a row. If you want to save a 120 character long text you need a 120-byte long ASCII file. If you want to save a 5,000 character short story you need a roughly 5 kilobyte ASCII file.

Ok, cool. Now we know what an ASCII file’s guts look like. Time to start looking for patterns we can use for compression.

Patterns… patterns… here’s one!

The ASCII files we’ll be working with are all based on the English alphabet, and in English not all letters are used evenly. Things like “s”, “e”, and “a” get used all the time while poor little letters like “x” and “z” hardly ever see the light of day. And don’t forget “ ”! You might not think of the blank space as a letter but just imagine tryingtowritewithoutit.

So some letters are much more common than others but ASCII stores them all in identical 8-bit bytes anyways. What if we were to change that? What if we stored the most common letters in smaller spaces, like 4-bit nibbles*?

The biggest challenge here is figuring out a way to let the computer know when it should expect a nibble instead of a byte. In normal ASCII every letter is eight bits long which makes it easy for the computer to figure out where one letter ends and the next begins.

But since we’re going to have letters of different lengths we need some way to point out to the computer what to expect. A sort of virtual name-tag to say “I’m a 4-bit letter” or “I’m a normal 8-bit letter”.

Here’s a simple idea: Our short 4-bit letters will always start with a 0, on the other hand our 8-bit ASCII letters will always start with a 1.

This solution does have some drawbacks. If the first bit of our 4-bit letters is always 0 that means we only have three bits left for encoding the actual letter. Three bits is only enough to count up to eight so that means we will only be able to compress eight letters.

A bigger problem comes from the 8-bit ASCII letters. They need their full 8-bits to work properly so the only way to mark them with a leading 1 is by gluing it to the front and turning them into 9-bit letters. So while our common letters had their size cut in half our uncommon letters are actually getting bigger. Hopefully we’ll still come out ahead but it might be close.

It’s amazing how many problems are caused by people trying to apply averages to things that ought not be averaged

Anyways, it sounds like we’re going to have eight different shortcut codes to work with. What letters should we use them for? Well, according to Wikipedia the eight most common letters in the English language are, in order: E, T, A, O, I, N, S, H. So that’s probably a good bet if we want as much compression as possible.

But Wikipedia doesn’t count the blank space as a letter. However because it’s so common in text it’s definitely something we want to compress. Let’s add it to the front of the list and drop “H”. That means the letters we will be compressing are “ ”, E, T, A, O, I, N, S.

Or more accurately “ ”, e, t, a, o , i, n, s. Remember that in ASCII upper and lower case letters are coded differently so we have to choose which we want. Since lowercase letters are more common than uppercase it makes sense to focus on them.

Now that we have our eight compression targets all we have to do is assign them one of our short codes, all of which are just the number 0 followed by some binary. Let’s go with this:

“ ” = 0000

“e” = 0001

“t” = 0010

“a” = 0011

“o” = 0100

“i” = 0101

“n” = 0110

“s” = 0111

Also remember that any letter not on this list will actually be expanded by putting a “1” in front of it’s binary representation.

One Makes You Smaller

Whew! That was a lot of abstract thinking but believe it or not we now have a complete compression algorithm. And just to prove it we’re going to do a compression by hand.

But what should we practice on? Well, our theme is “Wonderland” and I seem to recall that Alice was able to shrink herself by fooling around with a bottle labeled “drink me”. In ASCII that looks like this:

d r i n k m e
01100100 01110010 01101001 01101110 01101011 00100000 01101101 01100101

Eight bits times eight letter means 64 bits total. But if we replace the space, ‘i’, ‘e’, and ‘n’ with our 4-bit shortcuts while adding a 1 flag in front of the remaining 8-bit (soon to be 9-bit) letters we get

d r i n k m e
101100100 101110010 0101 0110 101101011 0000 101101101 0001

Which is 9*4 + 4*4 bits long for a total of only 52 bits. So we saved ourselves 12 bits, which is almost 20% less space than the original. Not bad.

One Makes You Grow Taller

Of course, taking text and compressing it is pretty useless unless we also know how to take compressed text and expand it back into normal readable ASCII. So please take a look at the following bit sequence and see if you can figure out what it used to say:

0001001111111010000001011011010001

I don’t want anybody accidentally looking ahead so let’s push the answer down a page or so with some another random comic.

Information theory jokes are funny, right?

So the first thing to do here is to take that big messy data stream and split it into individual letters. Remember that according to our rules the length of each letter is determined by whether it starts with a 0 or a 1. The 0s are 4-bit letters and the 1s are 9-bit letters.

So here we go. 0001001111111010000001011011010001 starts with 0 so the first letter must be four bits long: 0001

After removing those four bits we’re left with 001111111010000001011011010001, which also starts with a 0 meaning our next letter is also four bits long: 0011

Removing those four letters leaves us with 11111010000001011011010001. Since that starts with a 1 that means our next letter is 9 bits long: 111110100

By doing this again and again we finally get these six letters:

0001 0011 111110100 0000 101101101 0001

Now that we have our individual letters it’s time to turn them into, well, letters. But the kind of letters people can read.

For the four bit letters we just reference the list of short codes we made up. Scroll up in the likely event that you neglected to commit them to long term memory.

0001 0011 111110100 0000 101101101 0001
e a ? ? e

For the nine bit letters we need to remove the leading 1 and then look up the remaining eight bit code in the official ASCII chart. For instance 111110100 becomes 11110100 which is the code for “t”.

0001 0011 111110100 0000 101101101 0001
e a t m e

And there we go, the compressed binary has successfully been turned back into human readable data.

I Don’t Like Pretending To Be A Compression Algorithm

Doing these examples by hand was a great way to prove our proposed compression algorithm actually works but I don’t think any of us want to to try and compress an entire book or even an entire email by hand. It would be much better to teach the computer how to do this all for us. Which is exactly what we’re going to start working on next time.

After all, this is a Let’s Program, not a Let’s Spend A Small Eternity Doing Mathematical Busywork.

* Yes, nibble is the actual official term for half a byte. Programmers are weird like that.

Let’s Illustrate Morrowind Part 46: It’s Over When I Say It’s Over

So Azura is willing to back Fault’s claim of Neverine status but the prophecy won’t be fulfilled until the majority of the dark elves have also been convinced. This requires becoming the leader of all four ashlander tribes as well as receiving top honors from three of the great houses in the city of Vivec.

In more practical terms this requires doing dozens of side quests that require trecking across Morrowind’s quick-travel-less wasteland again and again and again. And while some of the quests can be rather clever I honestly only get about halfway through before rebelling. There has to be a better way to save the world than yet another volcano hiking trip!

Let’s see here…

If I remember the plot correctly a lot of Morrowind’s problems stem from the fact that their trio of god kings are slowly going insane. So theoretically if we can just deal with them the day will be saved, right?

The easiest immortal troublemaker to find is Vivec, who lives in the city named after him and hides out in a giant temple secured by a max difficulty lock. Fortunately Fault has just enough mana to cast a max level unlocking spell letting her into the godling’s main chamber with ease.

Once inside she’s immediately blown up by a max level fireball. But if you manage to dodge enough of them Vivec will eventually run out of mana and resort to trying to punch to you death instead. And as Fault well knows punching things to death is next to impossible meaning that it becomes relatively easy to whittle down Vivec’s health bit by bit, running away to regain stamina whenever you’ve been punched so hard it looks like you’re close to passing out.

Finally the mad god falls, but Fault’s victory is interrupted by a popup informing her that the threads of fate have been broken and that the world is likely doomed. Or in other words, we just broke the plot and can no longer win the game.

That has to have been worth a ton of XP

Now you could argue that this is a bad thing and that the game should prevent you from breaking it, which is why Oblivion and Skyrim actually make certain characters unkillable until after their part in the game’s plot is over or make certain doors impossible to open without the story’s permission.

But I like that Morrowind trusts me as a player enough to let me go off the rails and end the game the way I want to. Vivec is hard to kill but not impossible and he is protected by a door that is hard to open but not actually impassable. And while the game warns you that you might want to consider reloading an earlier save so you can still finish the plot there’s nothing actually preventing you from just continuing playing in your now messed up world as long as you want.

So while neither the plot or this Let’s Illustrate have anywhere else they can go from here I like to imagine that Fault, having defeated Vivec, goes on to have an epic battle against the other two kings of Morrowind. With them dead the ghost wall will undoubtedly fall, leaving nothing but Fault between Morrowind and the plagues of Dagoth Ur.

But you know what? I think the odds are in Fault’s favor.

Let’s Illustrate Morrowind Part 45: This Week In The Polls…

Through the power of wiki Fault finally opens the doors to Azura’s shrine.

Inside the shrine Azura herself rewards us the sign of the star and moon, which turns out to be a magic ring we will never actually put on. She also commands us to go forth and fulfill the fourth and fifth trials by uniting all the ashland tribes and becoming champion of at least four of the great houses. After that we have to cast down some false gods and confront the plague demon at which point we presumably win the game.

As a final bit of neatness Azura summons up the ghosts of some of the most famous past failed candidates for the Nevarine. They give us some simple advice, tell their stories and then give Fault a bunch of nifty artifacts which she obviously will never use. Still, it’s the thought that counts, right?

Fault then trecks all the way back to the Ashland camp to get advice on how to unite the four tribes. Apparently if we can both convince them we’re the Neverine and that Dagoth Ur represents an immediate threat they will gladly name us joint warchief.

At first I’m a little afraid our favorite ashlander chief is going to stonewall us with yet another “prove our worth” quest but he seems to have finally warmed up to Fault and recognizes her as the Neverine (but only after politely warning her that naming herself the head of a heritacle cult will probably mess up any temple or political related sidequests she’s on so she should think carefully before saying yes). He also gives us a list of the other three tribes we need to convince and even marks them on our map. All of them live along the grassy east cost which should be a nice break from all this volcanic cliff racer righting.

So… one tribe down. Three to go.

Looks like it’s time to find a new campaign manager…

Let’s Program A Compression Algorithm Part 1: How To Fit A Byte Into A Bit And Other Curious Tricks

So a while ago there was a new Alice in Wonderland movie coming out and my local geek store apparently decided it would be fun to replay the trailer again and again every few minutes. So it should be no surprise I’ve got the lyrics to “White Rabbit” stuck in my head.

One pill makes you larger
And one pill makes you small
And the ones that mother gives you
Don’t do anything at all
Go ask Alice
When she’s ten feet tall

Speaking of growing and shrinking, have you ever really thought about data compression? It’s that amazing thing that let’s you take an entire folder full of vacation photos and shrink it down into a single file that’s small enough to email to grandma. Data compression is also the star player behind streaming Youtube videos, fast loading image files, compact MP3 songs, reasonable computer backups, home DVD players and anywhere else you need to take a very big file and make it very small for either storage or transport.

But how exactly does that work? You would think that making a file smaller would result in lost data, kind of like how shrinking a picture in paint and then blowing it back up makes everything fuzzy. A 10MB file has 10MB of data, right? You’d think that the only way to shrink it is by throwing some of that data away.

After years of playing really old games on newer, bigger monitors I’ve grown fond of the fuzzy pixelated look

And yet somehow magic compression algorithms like zip manage to shrink things down and then return them to normal size without ever losing any of the original data.

To explain how that is possible we’re going to have to talk information theory, but that sounds boring so instead let’s talk fast food.

Your average fast food restaurant offers a dozen or so different kinds of sandwiches along with another dozen or so sides such as soda, onion rings and soft serve ice cream. Customers can then order whatever mix of items they want.

But not all combination of items are equally popular. Every day hundreds and hundreds of people ordered sandwiches and sodas for lunch but only one or two customers a week ask for a six pack of onion rings plus an ice cream cone.

This leads to a brilliant idea: What if we make the most popular combinations of food items easier to order by giving them simple numbers? A lot of people order hamburgers, a drink and some fries so let’s call that the “#1 Combo”. Other people order chicken strips and a soda so let’s call that the “#2 Combo”. We get a lot of visitors from the gym next door who just want a salad and some water so let’s call that the “#3 Combo”.

Fast food combos are basically a way to “compress” common orders into simple numbers that chef’s can “expand” by just looking at a chart. Customer wants a #3? Let’s check the menu and see which items go with that combo.

Customer service is thus much faster because now most people can just shout out a number instead of having to spend half a minute or more carefully listing out exactly what they want.

Information theory in a nutshell

Now information science has a lot of fancy words and equations for talking about this stuff but all you really need to know for now is that most types of data have patterns and those patterns can be used to create shortcuts. Restaurants use these patterns to replace complex orders with simple combo numbers and compression algorithms use these patterns to replace big files with simplified smaller files.

As an extreme example, imagine a file that’s just the word “Jabberwoky” repeated a million times. That’s roughly 8 MB of disk space, but do you really need all that? Not really. You could replace it with a file that says “JabberwokyX1000000” and as long as your code knew to interpret that as a million item list everything would work the exact same.

And that’s the secret to compression: A 10MB file contains 10MB worth of 0s and 1s but not necessarily 10MB worth of unique information. By finding a more efficient way to express that same information you can shrink your files, sometimes quite dramatically.

For a more realistic example: imagine an image file made up of a few million pixels. In a raw image file each pixel is a 32 bit number telling the computer which of several million colors it should draw on the screen. But what if your image doesn’t have millions of different colors? What if it’s a plain black and white drawing? You don’t need a full 32 bits just to mark whether a pixel is black or white so you could save a ton of space by inventing a new compressed image format where each pixel is just a single bit, 0 for black and 1 for white.

Or maybe you have a cartoon video file with a lot of identical still shots. Instead of storing a complete image for all those identical frames maybe you could create a compressed video format with the ability to say “This frame should look just like the last one”.

And maybe you have a text file that’s just a little too big for an email attachment. You could just email it in parts but I bet with a little clever thought you could come up with a way to compress it.

That’s going to be the topic of this let’s program.

Well, that and Alice in Wonderland.

Let’s Illustrate Morrowind Part 44: What’s The Dark Elvish Word For Friend?

Fault finally found the mysterious shrine that will help her prove her legendary status but it turns out the door won’t open unless you have some sort of Azura related star.

The bane of adventurer's everywhere: The plot door.

The bane of adventurer’s everywhere: The plot door.

Looks like it’s back to the ashlanders for more advice about the other half of the riddle: The pearl teeth thing.

OK, it turn’s out the pearl hint just leads us back to the same door who still won’t open until we have the star, which I assume is some sort of rare daedric artifact. I thus spend a painfully long time Justice Leaping and levitating around the nearby mountains looking for any sort of star or dungeon or cave before finally breaking down and checking the wiki.

It turns out the “star” the door is referring to is an actual star, one that only comes out at dawn and dusk. You know, just like the magic shrine door of the secret cult Fault was hanging out with a few updates ago. That really should have tipped me off on what was going on.

But here’s the thing: In most (all?) Elder Scroll games there is an actual artifact called Asura’s Star so my first instinct was that the door wouldn’t open until I had found it. And I got so caught up in that idea it never occured to me it might be a time based astrology door even though the game had already thrown one of those at me. Whoops.

Oh well, at least the door is open now.

Let’s Illustrate Morrowind Part 43: A Quest Marker, A Quest Marker, My Kingdom For A Quest Marker

Now that Fault is done selling all the loot she can and squirreling the rest away for later it’s time to head back to the ashlands and hand over the various proofs of heroism we collected from the haunted ruins. This successfullly impresses the chieftain who finally teaches Fault the riddle of the third trial: Something about finding a cave of a deadric lord by finding an eye and some pearl teeth and I probably should have written this down. But a local tribesman mentions that there is a famous rock formation shaped near the cave and I figure as long as i can get there I can probably figure the rest of the riddle out on the spot.

The landmark we’ve been told to look for is two giant rock spires marking the entry to a valley and if you talk to the right villagers you will find out that the valley lets out into the ocean which make it pretty easy to walk along the north shore of Morrowind until you find the two spires. Then you just have to follow the valley all the way to your goal.

If you somehow neglect to talk to the right villagers and instead just find someone mentioning that the cave is south of a certain ruin you could instead spend almost an hour wandering around a volcanic wasteland.

Guess which happened to Fault?

Taking the road less traveled might be a great metaphor for life but it's pretty bad advice when it comes to actual roads

Taking the road less traveled might be a great metaphor for life but it’s pretty bad advice when it comes to actual roads

It was at least some interesting wandering. As we got close to the center of the volcanic island we came across a massive magical wall that I can only assume is the Ghost Wall some of the NPCs mentioned. Apparently it exists to help slow down the rate at which blight disease and various monsters escape from the cursed mountain.

And it really is a wall, going twenty or so feet straight up and then stopping. This is a pretty poor design choice considering that cliff racers can both fly and carry disease but to Fault’s advantage it means she can use Justice Leap Mk 2 to access the interior of Morrowind.

That’s right, Mk 2, now with added slow fall effect! Sadly not quite enough slow fall effect buy what kind of hero of justice would Fault be if she couldn’t survive the occasional terminal velocity face plant?

Anyways, there’s a lot of diseased zombies inside the wall and a lot of ruins that will probably be important to the plot later but not really anything else so Fault Justice Leaps her way back over the ghost wall and eventually stumbles onto the valley she was looking for all along.

Only to find that the ancient ruin she was looking for won’t open for anyone who doesn’t have the “star”.

Let’s Illustrate Morrowind Part 42: Supply And Demand

So Fault is, once again, fighting her way through a creepy monster filled ruin in order to prove her “worth” to the ashlander chieftain. This is a little frustrating, but on the other hand the corpses and chests in the area gave Fault over a hundred thousand gold worth of rare weapons and magical doodads. She’ll never be wanting for money again… except for one tiny problem: No one in Morrowind seems to have enough cash to buy Fault’s loot.

Some economists believe the loot based economy may not be viable in the long term

Some economists believe the loot based economy may not be viable in the long term

For instance, Fault found an ebony sword worth 10,000 gold. With decent bartering she can sell it for maybe half of that. But the richest merchant she knows never has more than 2,000 or so gold on hand at a time. So Fault either has to sell at a huge loss or play a complex bartering game where she sells an expensive item for all of a merchant’s gold PLUS most of his inventory in trade. She can then sell the cheaper items back bit by bit as the merchant’s gold recovers. Whether or not the slight boost in profit is worth that much tedium is up for debate.

Anyways, all of Balmora runs out of gold before Fault cleans out even a tenth of her loot. So for now she just goes back to Caius’s house and shoves a king’s ransom worth of legendary weapons under the bed. She’ll hopefully be able to sell them bit by bit every time she returns to town. On the other hand, if she keeps finding new treasure faster than she can liquidate old treasure Caius might wind up coming home to the Fort Knox of ebony.

As you might imagine since this is a no-equipment run and we already have our handful of magic jewelry exceptions all of that wealth will be going into training. Getting perfect levels from here on out should be a breeze. Fault may even just outright buy half a dozen or so levels.

Let’s Illustrate Morrowind Part 41: Triple Dog Dare

Now that Fault has a more or less complete copy of the lost Neverine prophecies in hand it’s another trudge back to the ashlands and tell our favorite wise woman what we learned. Morrowind then once again shows off it’s excellent sense of open world pacing by having her suggest it might take her a while to figure out what all these new prophecies mean and that now would be a great time to go off and side quest.

Alternatively you can tell her to just make her best guess now and get the plot moving again.

Surviving Corpus disease and becoming immune to all illness in the process means Fault has now passed the second of the seven prophecies trials. For the third trial we’re going to have to talk to the chief.

Except he’s not so keen on talking. He’s not exactly questioning the wise woman’s opinion that Fault might be the Neverine but he sure would feel better about telling us the secrets of the third trial if we first proved ourselves a warrior by exploring the abandoned ruins of a sixth house fortress and bringing back: 1) Slime from a corpus monster to prove you’re really immune 2) A marked cup to prove you went to the right ruins 3) An ancient magical shield because a two item scavenger hunt is no fun.

I'm beginning to expect the clan chief isn't taking us seriously...

I’m beginning to expect the clan chief isn’t taking us seriously…

The ruins themselves are probably one of the creepiest areas I’ve visited in a non-horror game. They’re dark and filled with bizarre plague monsters and misshapen tentacled wizards. Of course Fault is immune to plague and has more than enough JUSTICE to cleave through an army of mildly eldritch horrors but the whole atmosphere of the area gave me the creeps.

Let’s Illustrate Morrowind Part 40: Learn History, Repeat History

Fault is finally ready to meet up with her recently rescued contact, who is now safe and secure in the secret monastery of some dissident priests. Their hideout can only be reached by giving a secret password to a specific boat-woman who takes you to a hidden island where you have to wait until either dawn or dusk for a magic door to open. Very thematic.

Once inside we chat with the priests and finally hear the rest of the plot. All our various puzzle pieces like the Neverine and Dagoth Ur finally start fitting together.

Apparently a long time ago the dwarves uncovered the crystal heart of a god and built three powerful magical artifacts to extract and control its power. This went horribly wrong and is the reason there aren’t many dwarves left alive today.

This is, coincidentally, also how 90% of Dwarf Fortress sessions end

This is, coincidentally, also how 90% of Dwarf Fortress sessions end

Some time later a bunch of dark elves including a guy named Nevar and his buddy Dagoth uncovered the same god heart and artifacts. Nevar was smart enough to recognize it for big trouble and asked Dagoth to guard it while he went off to get advice from his three most trusted counselors.

Sadly Dagoth wound up corrupted by the heart and Nevar and his counselors were forced to subdue him. This lead to peace and happiness for all of five minutes before the three counselors decided that they could use the heart to become the new god kings of Morrowind.

The rest is history. Nevar passed away, Dagoth faded into legend as a monster and the Triumvate ruled with a mostly benevolent iron fist.

But the heart is a dangerous thing and the Triumvate seems to be slowly losing their minds and their power while rumors stir that Dagoth never truly died and has awoken again.

All we need now is for Nevar to be reborn and we’ll have the whole gang back together, which is why this whole reborn hero Nevarine thing is so important.

This also means that if Fault keeps following the path of the prophecy it’s only a matter of time before she comes face to face with three gods and a demon lord.

So all things considered buying all those expensive enchantments was probably a good investment.

Let’s Illustrate Morrowind Part 39: The Importance Of Accesorizing

So Fault’s had to spend a week in jail, but that’s fine since it should give her recently rescued contact plenty of time to reach her hiding place and prepare the information we need for our quest to continue impersonating the Neverine reborn. But first, something has been bothering me.

Sure, Fault’s ability to go from civilian to Daedra armored hero with the casting of a single spell is cool… but real transforming heroes don’s use spells, do they?

That’s right, real heroes have gizmos to help them transform! Magic belts, high tech armbands, enchanted jewelry and all sorts of other shiny trinkets they can dramatically thrust into the air while shouting out their catch phrase. What, don’t look at me like that. I’m sure you watched plenty of power rangers when you were a little kid too.

Anyways, that means it’s time to dip our toes into the mad world of Morrowind enchanting. Way back in the first post I did mention that my no armor, no weapon, no potion run would still allow me a few pieces of enchanted jewelry just to experiment with the system. Well it’s time to experiment.

In Morrowind enchanting is basically the same as creating a new spell that can then be cast by using the enchanted item (or by hitting things with an enchanted weapon). The major advantage is that enchanted items have their own constantly regenerating magic pool so even if your character is all tapped out on MP they can still use enchanted items to heal or teleport or shoot fireballs or whatever.

The major downside is cost. Spells that cost a few hundred gold to research cost several thousand gold when inserted into an artifact. You can theoretically skip this cost by enchanting your gear yourself but unless you have crazy high stats the odds of failure are so great it’s probably faster to just grind for gold and pay an expert to do it for you.

Which is exactly what Fault does, having finally grown strong enough to laugh in the face of cliff racers and safely explore and loot the many caves and ruins dotting south western Morrowind.

That gives Fault enough gold to commision Justice Enforcer, a ring that lets her summon magic spears at will, and Justice Idealize, an amulet that summons her armor.

Sure, it's a pretty rock but how many pluses does it give you?

Sure, it’s a pretty rock but how many pluses does it give you?