Friday, December 30, 2011

A Simple C++ Timer Class

I'm still working on my simple game engine for You Are Cat here and there. I'm kind of throwing in features without a definitive design. Many people will tell you that that is a headache and not the way to build an engine. I would agree, but I tend to learn things a little better when I have to revise and rebuild the code constantly.

Yes, it's not very efficient. Yes, I know how to design and do class diagrams, etc. When I get this basic version done and understand how every little piece works and how to optimize it better, I'll probably redesign it the proper way – which will be easier with all that knowledge (which I don't have yet).


But that's not what prompted this blog entry. I built a simple Timer class and wanted to share it.

Where's My Timer?
Since each game mode in You Are Cat will involve a timer (a countdown, to be specific), I needed a timer that would display when that mode is active. I looked around on the internet, but didn't find anything that really fit my needs, and no one had a straight-forward solution, so I just created my own.

This class actually only tracks the change in time for your countdown (you can also have it count up if you want) – it doesn't control how the time is displayed. You would do that separately in however manner you wish. Currently the time in mine displays as a DirectX Font. I'll probably change it later to a texture / sprite.

The Header
You can find the full code of the header here. The class tracks only a few things:


  float _timeToCount; // core time in milliseconds
  float _incrTime; // time to increment
  bool _countdown; // is the timer a countdown?
  bool _timerOn; // is the timer running?
  int _timeMin; // minute portion of _incrTime
  int _timeSec; // second portion of _incrTime


If you look at the full header code you'll see various functions to Initialize, Update, Start, Stop and ConvertTime. Others check to see if the Timer is running, or what the current/core time is. The only ones not defined in the header are the constructor, destructor, Initialize, Update and ConvertTime.

The Implementation
You can find the full code of the implementation here. The guts of the class are the functions Initialize, Update and ConvertTime.

Initialize
This function gets the Timer object ready for use. You only have to specify the total time for the timer in milliseconds, along with a boolean value for whether the timer is a countdown or not. Depending on that boolean value, it will set _incrTime accordingly. _timeToCount will always represent the original time you initialize the object to; it doesn't change. It will also call ConvertTime to convert the millisecond value of _incrTime to integer values for minutes and seconds.

Update
This function updates the current value of the timer (_incrTime), using the frame time of your engine. In other words, the difference between the start and end of the previous frame. Your engine will be calculating this since it's needed to update positions of objects every frame so it can render movement properly. Merely pass this frame time (in milliseconds) into the Update function. It will decrement / increment the _incrTime accordingly and update the minutes / seconds with ConvertTime. It also clamps _incrTime if it goes out of bounds (beyond 0 or _timeToCount). This function should be called once a frame, most likely in the section that manages the HUD.

ConvertTime
This function does a simple calculation to turn the value passed to it (in milliseconds) into two integers: one for minutes, one for seconds. These are the two values that you can use to feed the display of the timer. They can be accessed via the Min and Sec functions.

Using the Timer Class
In my engine, I've added a pointer to a new Timer object in my HUD class as a private variable. Then I created an accessor function called Countdown, which returns the pointer to the Timer.

After I've created my HUD, the Timer is ready to go. I merely call the following to start and display it:


  _HUD->ShowTimer(true);
  _HUD->Countdown()->Initialize(90000.0f, YAC_TIMER_DESCEND);
  _HUD->Countdown()->Start();


ShowTimer is a function specific to my HUD. If true, a flag in the HUD class is set and the timer will be displayed on-screen, otherwise not. Next, I call Initialize to set the timer at 90 seconds and descending (I have defined YAC_TIMER_DESCEND as true in another file). Lastly, I start the timer with Start, which sets the _timerOn flag.

Because the timer won't always be displayed, there's no point in wasting clock cycles by calling an update function if it's not being used. So my timer only updates within my HUD class implementation when it's on and running. I call the update when it's time to display the current time of the timer. Here is what I call:


  if (_pTimer->isRunning()) {_pTimer->Update(frameTime);}


_pTimer is the actual private variable for the Timer, the one that was accessed by Countdown in the previous code snippet. If the timer is running, then update it. After that, display it's updated value on the screen using the Min and Sec functions. Once it reaches the end of the countdown (or countup, if that's a word), it will not advance anymore, having been clamped by the Update function.

Once the timer is finished, you'll need code that advances/ends the gameplay, as well as housekeeping function calls that stop, restart, hide or kill the Timer object, depending on your needs.

You Are Cat
Another reminder that the full code I'm working on is visible as an open source project (Eclipse Public License 1.0) on Google Code. You can view it here.

If I make any changes to the Timer class, I'll update this post accordingly. There are different ways it can be implemented, obviously, it just boils down to the needs of your program.

Thursday, December 15, 2011

The Wheel of Time [9] Winter's Heart (2000)




We continue the "Wandering Trilogy" with Winter's Heart, another short volume that required another two year wait. This is when it really became evident that the pace of the series had slowed considerably. It wasn't a one-off anymore; it was a trend. Re-reading now, it's a decent book, but back in the day it was frustrating, despite having one of the iconic scenes of the series.

More on that later. First, a digression about the new medium of book publishing. eBooks.
Before you continue:
  • This is part 9 of my The Wheel of Time retrospective
  • See this blog post for an overview of the retrospective
  • These blogs are most effective with your own re-read of the series
  • Warning: CONTAINS SPOILERS FOR THE ENTIRE SERIES

The Prologue eBook

Winter's Heart started something new in publishing. Given that the previous book was the first #1 on the New York Times Bestseller list of the series, anticipation for the next installment was high. To capitalize on that and build even more buzz, they offered the prologue for Winter's Heart, entitled "Snow," in an eBook format for $5 a few months before the book dropped.


Now, eBooks barely existed back in 2000. And I certainly did not want to spend $5 for it, even though the prologues from this point on are around 90 pages on average. A few bucks more could get you an entire paperback book six times that length. It also felt like they were starting to milk the series and make as much money off it as they could. Obviously there are marketing reasons behind all this and it is a business after all... but to a 24 year old still naïve about some things in the world, it was hard not to think that way when the books are suddenly shorter, take longer to release, are slower in plot and are now #1 bestsellers. I'm just saying.

But really, the primary reason I didn't bother with the prologue eBook (or any others in the future), was that I wanted to read the entire book at once. I didn't want to read part and then wait a few months in between. It's like when you hear the first single from your favorite band's new album, and listen to it incessantly, then when the album actually comes out you skip that song during the first few listens of the album because you've already heard it twenty times. The book was meant to be read whole in one shot, so that's what I wanted to do.

Reading eBooks

I would have only been able to read it on a computer at that point, anyway. I got my first computer of my very own in 1998, after finishing college (the only computer I "owned" before that was a Commodore 64 my parents had). It was a Compaq laptop with Windows 98. But I didn't use it to read eBooks. I didn't want to read books on my computer.

If I recall correctly, though, the only decent formats then were .pdf (Adobe), .pdb (Palm OS) and .prc (Mobipocket). You could also read them on a PDA. I did get a few eBooks a few years later, in 2002 / 2003, just before the next volume (Crossroads of Twilight) came out. I would get them in the PalmReader format, and I had this totally bitchin' Sony CLIÉ PDA on which to read them. I actually still have those eBooks on my previous PC hard drive, but they are worthless now, since they have DRM and it was tied to my account and credit card info on whatever ancient website I bought them at, which I don't remember. So I can't even view them now.
  
Only thing missing here was internet access.

Thoughts Then

Anyway, as I said before, another two years passed before this volume arrived. I was starting to get used to this; Winter's Heart was the third volume in a row that was released in a two-year interval. I realized that the days of a new novel every year were gone (sigh). There seemed no end in sight for the series, and I figured it might stretch on to 15 or 16 volumes. I definitely thought that after reading this one.

I still lived in Omaha when this book came out. I vaguely remember sitting in a mall food court and eating lunch while reading the prologue, awkwardly trying to hold hardcover open with one hand while eating with the other. I'm pretty sure it was the Westroads Mall, which was right by where I worked at the time.

I liked how the novel was themed around winter, since prior to Book 8 there wasn't much in the way of snow or winter. The early books spanned longer periods of time and things were so fast-paced that I didn't really pay attention to the seasons in the series that much. It had been summer for so long (due to the Dark One's touch on the world) and with the years between books I had forgotten about winter.

However. I did not like this book upon first read. I was very frustrated with the glacial pace. Where were all the cool things that had been prophesized or viewed, all the things Jordan had left hints about and had been building up to for 8 books? We're still not there yet?

No Preparatory Re-Read

Something worth mentioning is that this was the first time I didn't do a full re-read of the series prior to the new volume coming out. That had become a tradition for me starting with Book 6, Lord of Chaos, but with 9 and counting, a re-read every time became a bit much. It takes a long time to read these books.

As much as I love the story, there are other things I'd like to read, and I need breaks from it every once in a while. So I didn't do a full re-read for this one, I merely read the previous two to refresh my memory on recent events.

Thoughts Now

It's so much easier to like this book now, with the knowledge of events in later volumes. It still feels a bit short, and the Elayne chapters still make my eyes glaze over (I generally skim through them), but overall I enjoyed the book a bit more this time. I can now see why Jordan did what he did, though as I mentioned in the blog for The Path of Daggers, it's hard to see that when you first read it and don't know where things are going.

The book is slow in places, and personally I don't think that slow pace works as well when chapters are grouped in chunks by character, especially "one and done" groups of chapters (i.e. the character never appears again in the book). Take a step back and look at what's going on at a high level, compare it to any of the first 7 volumes, and you'll see a marked difference.
  • 6 chapters = Perrin finds out Faile has been captured, he mopes around camp.
  • 8 chapters = Elayne dickering around in Caemlyn, assassination attempt (though not really), a bunch of women glaring at each other (Sea Folk, Kin, Aes Sedai, Wise Ones), sex with Rand, bonding Rand, visiting the Borderland rulers in Braem Wood.
  • 10 chapters = Mat loiters in Ebou Dar, thinks about leaving, finally leaves with a huge entourage of Important People.
  • 8 chapters = Rand skulking around Far Madding, looks for renegade Asha'man to kill, finally leaves and cleanses the male half of the Source.

A visual breakdown can be seen here.

That's essentially it. There are a few important and memorable scenes, but for the most part the book moves bits and pieces of the main storyline along at a snail's pace. The Perrin and Elayne storylines barely advance in comparison to their length. The Rand and Mat storylines were satisfactory, in that they moved many pieces about, but I desperately wanted more during that first read-through.

And when grouped in chunks by character, some of the content loses its importance. Take the Perrin chapters. They are all at the beginning. He doesn't do much, and then he's done until the next book. I mentioned this earlier, it's a "one and done" type of structure. Jordan started doing this with A Crown of Swords. This is part of why I don't like these middle books (Wandering Trilogy) as much as the others, which mix up appearances throughout each book and make it feel more like everything is happening at once.

Crossroads of Twilight, the next book, does this too.  It really drags down the story, in my opinion.

Far Madding

One thing that has always bothered me about this book is Far Madding. Of course, we've known the city has existed, since it's marked on the map, but the characters have never gone there. It's briefly mentioned a few times, but nothing about what the city is like, aside from men are expected to obey women there (big surprise, women are more powerful in this world overall).
   
Is it me, or does the island look like the Starfleet emblem?

So I found it quite a shock to learn that people can't channel in Far Madding. They have some large ter'angreal in the middle of the city called a "guardian," that prevents men and women from channeling in the city, as well as detects channeling outside the exclusion zone. Rand goes here for one main reason: to escape the hazards of saidin. He's been having all sorts of problems with the Source – getting nauseous, having problems holding onto it, etc. Very convenient to suddenly have a completely new place that blocks channeling to go to.

I would guess that this caused confusion for many readers because we didn't know the city was like that. It seemed like this would be knowledge the characters would discuss earlier, mainly for the benefit of the reader.  Kind of like how Cadsuane is never mentioned until halfway through the series.  After 8 books, it seemed odd to throw in an entirely new element like this, especially when the city is smack in the middle of the map. At least to me. I mean, there are other places we don't go to until way later in the series – like Bandar Eban and Maradon in Books 12 and 13 – but those places don't have any special attributes like Far Madding does.

The Cleansing

This is one of the iconic scenes of the series, the cleansing of saidin. It's rather clever how Jordan pulled this off, since it's hard to fathom that anyone short of the Creator or the Dark One could cleanse the male half of the Source. But Rand made it work with all the tools that were essentially left to him from times long past.

Why else would the Choedan Kal have been created? They were never used before, from what I gather. Why else would Shadar Logoth have come into being? It seemed to be some random "evil thing" like Padan Fain, serving no real purpose but to be evil in The Eye of the World. And it helps that there's someone like Nynaeve now, one of the most powerful Aes Sedai in a long time, in terms of One Power strength (aside from the former damane Alivia, of course).

All the elements were there for a reason, and Rand figured out how to do it. I didn't exactly understand what happened the first time I read it, but later understood how the evils essentially "cancelled each other out."

Like Far Madding, I found it a bit jarring to suddenly go cleanse the Source. Yes, Rand mentions it a couple of times before that, but he didn't seem too urgent about it and after the ho-hum of most of the book, I wasn't expecting him to do it right then and there. But it makes sense when you think about it. The problems he was having with the Source, along with the number of Asha'man going mad, expedited his need to cleanse it.

Regarding the eBook cover, which shows Rand with the male access key for the Choedan Kal – this is probably my favorite depiction of Rand. That's generally how I've seen him in my mind, though with a bit longer hair. Would have been cool if the cover had shown him and Nynaeve facing each other while channeling, but this will do. Nynaeve was on the eBook cover for the last two volumes anyway.


Darrell K. Sweet: 1934-2011

I'm assuming if you're reading this blog entry, you've read all the entries before it. And if you've done that, you'll know that I haven't been kind to the cover art by Darrell K. Sweet. Unfortunately, Sweet died while I was reading this book, on December 5th. Instead of complaining about the cover for Winter's Heart this time, I'd like to talk about Sweet and his art. I recently noticed something about the art for the Wandering Trilogy (Books 8-10) that I hadn't noticed before, and it makes more sense to discuss that in the blog for Crossroads of Twilight.

I fully respect Sweet as an artist. He was a great painter; his talent is unquestioned. It was partly due to many of his fantasy covers that I got into fantasy in the first place. His covers for the Xanth novels (by Piers Anthony) and The Chronicles of Thomas Covenant (by Stephen R. Donaldson) are classics and were very influential to me when I was younger. He also did the ones for L.E. Modesitt Jr.'s The Saga of Recluce, which I didn't get into until I was older, but which have become the face of the series.

I've always loved the Xanth ones the most, though. His style fit that world perfectly. It's going to be strange to not see his artwork on the new novels coming out in that series.

Here are some of my favorites:


Sweet and The Wheel of Time

The main reason I pick on his covers in these blogs so much, though, is because I didn't feel his style fit The Wheel of Time. He knows how to make an eye-catching cover – which is the point, they're trying to sell books – but I felt the series got short-shrift because of the inaccuracies of the covers. I just don't like his interpretation of Robert Jordan's world. When you paint Trollocs as regular humans with helmets, to me that shows a lack of respect for the source material – it's like he didn't even read the text, not even an excerpt. It's not a detail that's hard to miss.

What makes me sad the most, though, is that Sweet never finished the cover for the final upcoming book, A Memory of Light. Even though I didn't like the art he did for the series, he started it and should have finished it. According to Brandon Sanderson, Sweet created a concept, but not a finished painting. So who knows what will happen to the cover for this last one. I trust Tor and Harriet (Jordan's widow) will make the right decision. We'll find out next year.

Update, Feb 2012: Michael Whelan is painting the final cover.  Yeah!  Very happy about this.

The last book in this series is becoming even more bittersweet. Both the original author and cover artist have died. The ones Sanderson has been writing still felt the same as Jordan's partly due to the covers. Now the last one will be out of place.

Either way, thank you, Darrell K. Sweet, for all the fantasy artwork you've done over the years. I may not have liked what you did for The Wheel of Time, but they are undeniably an integral part of the series and now I can't imagine it without them.

Next:
Book 10 – Crossroads of Twilight


Previous:
Book 8 – The Path of Daggers
Book 7 – A Crown of Swords
Book 6 – Lord of Chaos
Book 5 – The Fires of Heaven
Book 4 – The Shadow Rising
Book 3 – The Dragon Reborn
Book 2 – The Great Hunt
Book 1 – The Eye of the World

Sunday, November 27, 2011

Changing Icons in Visual C++ Express Edition

I recently started working on a game in C++, using (as a starting point) a game engine that I helped create in a Game Engine Architecture class I took at DeVry University this past year. I'll be revising the engine and tailoring it to my needs for the game, as well as abstracting the engine portion from the game portion (so it could potentially be reused, and also to get some experience with that kind of coding).

I decided that whenever I solved some troublesome problem or had something interesting to say about it, I'll blog it here. It didn't take long for me to find something.


Application Icons
Anyone who uses a computer knows what an icon is, right? It's used for a shortcut on your desktop, or the Title Bar for a window, or in the application window in the Taskbar. When programming in Windows, you can obviously customize that by using an .ico file, which is essentially a small bitmap image.



So... it seems like this should be something that's easy to change, yes? I thought so too, and ended up spending a few hours trying to figuring it out.

And before you say it, no, I'm not stupid. The problem stems from two things: 1) my relative green-ness at C++ coding (not an expert yet) and 2) the lack of features in the Express Editions of Microsoft's Visual C++ IDE. The Express Editions are free, which is great; however, they aren't as full featured as retail versions of Visual Studio, and that sometimes makes a task that should be very easy to do, a bit difficult.

Such is the case with the Express Edition. You can't programmatically add resources through the application and there's no resource editor. You can do it manually, though (anything can be done manually). Just a heads up, I currently use the 2008 edition and this tutorial will be written from that perspective.

Searching the Internet
Whenever I hit a roadblock in coding, the first thing I generally do is search the internet. Nine times out of ten, someone else has already asked the same question and gotten an answer. All you have to do is find it. So I start searching with Google.

The first thing that confused me about this problem, was that no one had a simple explanation of the entire process. It was in bits and pieces and I had to put it together (which prompted me to write this post). The second was that some people were talking about one or the other, i.e. the problem of the icon for the final .exe (desktop shortcut) you create vs. the icon used in the window title bar or taskbar. At first I didn't understand this distinction – I was focusing only on the window title bar icon, not the .exe one.

It took me a while to get this sorted out, so hopefully this complete explanation will help someone.

The Resource Header
The first thing you need when dealing with resources, is a header file that defines the resource variables you want to use in your project. We'll only need variables for small / large versions of your icon. Use Visual C++ to create a header file: right-click Header Files in the Solution Explorer, go to Add à New Item. In the templates, select Header File (.h), enter the name at the bottom (I called mine Resource.h) and click Add. There should be an empty .h file in your project now.

Open that header file and add this code:



    #define IDI_ICON_BIG 1
    #define IDI_ICON_SMALL 2



This defines two variables that we can use in our code. The compiler will treat them as integers (1 and 2), but a string version makes it easier for us to read in code. You can change those variables to whatever you want, but use the prefix of IDI_ since that's the standard format for icon resources and it's good practice to use that.

Before you save and close the file, add a few blank lines at the end. If you don't, you might get an error like this when you compile the header file later:

fatal error RC1004: unexpected end of file found

This is a bug in the compiler and is fixed by adding the extra lines at the end. I found the solution at a site called Code Library.

With your extra lines added, save and close the file.

The Resource File
Next, you can create the resource file itself. This file essentially associates resources (like an icon) to the variable that you use in code. In the IDE, a resource file is usually represented with a suffix of .rc. Aside from the resources themselves, all other files in a project/solution are generally text files. So the easiest way to create a resource file is to create a text file and save it in your project folder – the same folder as your winmain.cpp file – and use the .rc suffix instead of .txt when you save it. I named my file app.rc, but you can name it something else if you wish.

You can then edit the file in a generic editor like Notepad, or you can add it to your Solution in Visual C++ manually and edit there. To add it, right-click on Resource Files in the Solution Explorer and go to Add à Existing Item. Navigate to your .rc file, select it and click Add.

Now edit the file. You can have a different icon for each thing (executable, window title bar and taskbar), so we'll set it up that way even though you might want to use the same icon for all three. If you try to double-click the .rc file to edit it, you most likely will get this warning:

Curse you, Express Edition!!

To get around this, right-click the .rc file, select Open With on the menu, then in the dialog that appears, select "Source Code (Text) Editor." You'll now be able to edit it in the Code Window. Add this code:



    #include "Resource.h"
 
    IDI_MAIN_ICON ICON "res/app.ico"
    IDI_ICON_BIG ICON "res/XXXX.ico"
    IDI_ICON_SMALL ICON "res/YYYY.ico"



Where app.ico is the name of the icon file you want for the executable, and XXXX.ico and YYYY.ico are the names of your big and small icons for the windows, respectively. Replace those with your own names, but Windows will use app.ico as the default filename for the executable icon, so you'll need to use that for that specific icon file.

This associates your resource variables with the files themselves. You need to include Resource.h so the compiler knows their definitions. The ICON term denotes that it's an icon resource, and the path in quotes is the path to the file in your project.

Now, you could just put the .ico files in your main project folder, but if you have a lot of resources, it's better to keep them separated and organized. I put mine in a folder called res in the main project folder. You can put them wherever – just make sure the path is updated accordingly.

You can read more about Resource Files here.

Icon Files
If you don't already have your .ico files, go get them now and come back. If you're looking for some to test or whatnot, you can find free ones on the internet. I like this site, personally: Icon Archive.

If you have picture files that you want to convert to an icon, there are numerous websites that will do this for you. Here are a few to start with:
  
Once you have them, name them appropriately (app.ico for the executable, of course). Make sure the names match up to your .rc file and you have saved the files in the right location within your project folder tree. Add them to the Solution Explorer in the same manner as the .rc file previously (add existing item). You don't technically have to add them to the Explorer, as the compiler will know where to get them from the .rc file, but it's good practice and helps you keep tabs on your files.

Load the Icons
Everything is now in place to add your icons to the window / taskbar. In your code (winmain.cpp), you should have something that initializes the window class that you're using. Here are the pertinent lines of mine (the full code is linked further below):



    bool initWindow(HINSTANCE hInstance) {
 
    // initialize the window class
    WNDCLASSEX wcex;

    wcex.hIcon = LoadIcon(hInstance,
                     MAKEINTRESOURCE(IDI_ICON_BIG));
    wcex.hIconSm = LoadIcon(hInstance,
                     MAKEINTRESOURCE(IDI_ICON_SMALL));
    // other wcex properties excised...

    RegisterClassEx(&wcex);

    // code excised...

    return true
    }



For the hIcon and hIconSm properties, you merely load the icon with LoadIcon, using the variables we set up in the resource header and resource file. Rebuild your project and voila, the window, taskbar and executable should have the correct icons!

Compiler Notes
If you're experimenting a lot and your project doesn't take too long to build, a good thing to do is to clean your solution before rebuilding it. What this does is delete the compile-time files that are generated, like the executable, or a .res file.

Speaking of .res files, this is a compiled file that consists of all resource objects (icons, bitmaps, etc) and associated .rc files. Visual C++ will compile this for you from the files in your project, and it should appear in the Debug folder under the main project folder after rebuilding.

You can compile these files yourself by using the Resource Compiler (rc.exe) that comes with the Windows SDK. Search for it on your computer, place any .rc and associated resource files in the same folder, then use rc.exe via the command line. Here's a good article on how to use it. And the full documentation on MSDN.

My Project
The game I'm working on is called You Are Cat. The code I'm working with is visible as an open source project (Eclipse Public License 1.0) on Google Code. You can view it here.

I've decided to make it available since it will hardly be the final version of the game (if I ever finish) and because I'm taking parts of the code from the basic engine created at DeVry with some other students.

As far as the game, I'm not going to explain what it is about or what you actually do. You'll have to figure it out from the code, if you're so inclined.  

Thursday, November 17, 2011

The Wheel of Time [8] The Path of Daggers

This is Part 8 of my continuing series of blogs regarding what may possibly be my last re-read of The Wheel of Time, in anticipation of the 14th and final book releasing in 2012. Please see this blog post for an overview of the re-read and why I am blogging about it. Warning: CONTAINS SPOILERS FOR THE ENTIRE SERIES. The best way to approach this retrospective is via your own re-read. If you have not read the entire series yet, you may want to wait on reading this.




Book 8: The Path of Daggers (1998)
This volume begins the third trilogy in my organization of the series. We had the Setup Trilogy (1-3), the Action Trilogy (4-6) and what I'd call the Bridge to the Second Half or the Midpoint (7). This next trilogy, comprised of Books 8-10, I call the Wandering Trilogy.

Wandering? As in, Robert Jordan didn't know what he was doing and was wandering about aimlessly? Many might say yes, and that he was merely stretching things out and milking the series now that it was a New York Times Bestseller (The Path of Daggers would be the first #1 of the series). To me, it's more about the characters wandering around, delayed by life, doubting themselves, caught up in a variety of situations and not sure of where they are going. Nothing is turning out as it should, expectations are dashed, and this leads to a lot of sitting around by many of the characters, stuck in a rut for the next 3 books.

Now, I understand what Jordan was doing here. Does it make for exciting reading? Not necessarily. Could it have been done a different way? Surely. If you're one of those who really hate the next few books (and I used to), bear with me – there will be praises and criticisms alike. Even though I love this series and recommend it to people, I do believe it has its faults and caveat a recommendation with a warning about how slow the Wandering Trilogy can feel for a first-time reader.

Thoughts Then
I vaguely remember buying this when it came out, in the fall of 1998. I had graduated from the University of Nebraska earlier that year and was living in Omaha with my friend, Mike Dappen, the singer in the death metal band I played drums in, Lead. I moved into the spare room of Mike's house, where we practiced in the basement. I had graduated with a BS in Biochemistry, but decided during my last semester that it really wasn't for me. So I just finished to finish and have a degree, got a simple job at an insurance company (Central States Health & Life Co. of Omaha) and focused on my band for a while.

I designed the logo myself... pretty cool, eh?

Mike's mother worked in Chicago during the week so most times it would just be Mike, his sister Angie and I, with friends and bandmates frequently hanging out. They had a huge basement with a pool table, foosball table, bar and hot tub. It was pretty awesome. Our Denny's hangout was just down the street and I had a lot of time to read.

I don't particularly remember reading this the first time, but I do remember that I was extremely disappointed. Extremely, for a few reasons. One, that it was super short. I could tell that from the moment I picked it up – less pages, larger font and line spacing, less chapters (only 31 when 50 was par for the course). I felt a bit ripped off. Two years to get half a book? It's funny to say half a book now. Even though it's the shortest of the entire series, at around 226K words it's much longer than your average novel. I had been spoiled by the epicness of Books 4-6 (which average around 378K words each).

What's Going On?
As for the content, the only thing I liked initially were the Rand chapters, when he tries to drive the Seanchan completely out of Ebou Dar. Having Narishma get Callandor, having something cool happen with it after four books (he left it behind in Tear at the beginning of The Shadow Rising) was a treat. But pretty much everything else sucked to me. Mat pulled a Book-5-Perrin-Disappearing-Act and didn't appear at all. (Though Jordan's explanation of this is perfectly logical – he's just sitting in a bed recovering from injuries, not exciting reading – at the time I felt cheated.)

Elayne, Nynaeve and that whole gaggle of annoying women spend 20% of the entire book moving through a gateway, walking to the top of a hill, using the Bowl of the Winds, then retreating through another gateway as Seanchan attack. 20%. For that.

This much of the book was the above.  Excluding the relatively short prologue, of course.

Elayne finally reaches Caemlyn, beginning her quest to take the Lion Throne, a story thread that doesn't get resolved until Book 11, Knife of Dreams.

The Egwene chapters were fairly boring and the only interesting events in her storyline happened toward the end of her sequence, starting a story thread (unification of the White Tower) that is not resolved until Book 12, The Gathering Storm.

As for Perrin... well, his chapters were the worst. He's looking for the Prophet. Morgase and company join him, he finds the Prophet and Faile is captured by the Shaido. That's it. This begins a story thread (rescue of Faile) that drags on until Book 11, Knife of Dreams.

Detecting a pattern here? I had no idea at the time that these storylines would drag on so. Nobody really did that in fantasy at the time and I had not encountered it before. But it's a logical extension of the theme of the novel, something I didn't really understand back in the day.

Thoughts Now
This re-read has opened my mind quite a bit. I actually truly enjoyed this book for the first time. I'm no longer disappointed by the shortness. I now understand the place it has in the series and like I mentioned in the blog for A Crown of Swords, it was not until I had the knowledge of almost the entire series under my belt that I could appreciate what the book was trying to do.

I would argue now that this volume is one of the most focused entries in the series and the contents actually tie into the title quite well. One of the quotes before the prologue sums it up nicely:



"On the heights, all paths are paved with daggers."

These characters have been riding high for a while, reveling in their newfound power. But now they are tested and know what it means to be "on the heights." Everyone is ready to take a shot at them; daggers are everywhere ready to cut you.

Take Rand. He conquers one country after another, kills one Forsaken after another. He's seemingly unstoppable and thinks he can do anything. So he tries to drive off the Seanchan again – but this time he fails. The madness of tainted saidar is catching up to him and he fails badly when he loses control using Callandor, killing some of his own people. Some Asha'man try to assassinate him. Suddenly he's lost control of a lot of things, and must go into hiding, step back and think things through. He can't lose control again and must figure out a way to deal with it – the focus of the next volume, Winter's Heart.

You don't normally see heroes doing this in fantasy epics. If they do, it's resolved easily within a few chapters – it doesn't span multiple books. They usually barrel through to the end, overcoming adversity efficiently. The way Jordan handled this in WoT is different and in some ways it works, in others it doesn't.

The Cover... It's Okay
The Sweet cover for this volume isn't too bad. Okay, I'll admit, it's actually decent. I don't mind it as much as the others. I don't cringe when I look at it at all. I like this version of Rand probably the most of any Sweet cover, although the proportions between his upper and lower body don't seem quite right.

To be honest, the best part of the cover is the back... no Sweet-style trollocs for once! The statue is fairly accurate to the description in the book so it was cool to see something done right for once. In celebration, I'll actually post the entire cover this time:

Finally, a Sweet cover that doesn't totally suck!

I also discovered there was an alternate paperback cover for this, similar to the A Crown of Swords one that I used to have. Surprisingly, it's not on encyclopaedia-wot.org. The "path of daggers" graphic is pretty cool. Why, oh why, did Tor not just reissue everything with this style of cover and ditch the Sweet ones?

I really like this cover.

Rand is in Everyone's Prophecy
Something that has always bothered me about the series was how Rand factored into most cultures' prophecies. We now know that Rand is the Coramoor to the Sea People... yet another group of people wanting a piece of him? It feels like overkill sometimes. And this is before the whole deal with the Seanchan and Rand "kneeling before the Crystal Throne" before the Last Battle, as foretold somewhere in the series. It's kind of like the Bible having different versions, or people like the Jews believing something different about Jesus Christ compared to Christians. Makes sense, though I find it annoying at times.

It also speaks to human nature that all the disparate groups that Rand is trying to get to work together still ultimately want to only look out for their own interests. Their interests will survive Rand and Tarmon Gai'don. That event, which Rand is focused on, is bigger than all of them, yet they still don't get it. Maidens want to be babies and beat Rand because he left without them – things like that in the series I find disappointing and I've never liked those parts or the selfishness some characters have. But I suppose it's realistic.

The Wheel of Time on the Internet
In the years between Books 7 and 8, I started looking at Wheel of Time content on the internet. My first experiences with the internet as we know it today were in college in 1995 or so. I didn't have a computer of my own and the computers in the labs at school were a mix of Windows, MS-DOS and Mac computers. I still have the 3.5" hard disks (that only held a pitiful 1.44MB) with my papers in Word 5.0 or WordPerfect format on them.

Netscape Navigator was the browser we used and most websites were of the old school Geocities type: text in multiple colors, tiled backgrounds that conflicted with the text, animated gifs, things blinking, HTML table borders showing... it was bad. Kind of like what Myspace profiles turned into. Here's a great website that lets you Geocities-ize other sites, if you don't know what I'm talking about (or if you're just bored and want some fun). Ah, memories.

Anyway, inevitably I found the original WoT newsgroup (rec.arts.sf.written.robert-jordan, it's on Google Groups now, still with posts dating back to 1994!), and later in 1998-99 the early fansites, like Dragonmount and Wotmania (now defunct), along with the WOTFAQ. A newsgroup was essentially the first kind of discussion forum and it was one of the first places I found with people discussing WoT on the internet. I just lurked and read the content on these sites for the most part. It was nice to "listen" to others discuss the book, as none of my friends at the time read the series.

From this point forward I wasn't alone with the series anymore – I could always find discussions online. I joined a few of the sites later on – Dragonmount, Wotmania and TarValon.net – and became really active on one for a short period of time. More on that in the blog for Book 11.

So, thank you to the World Wide Web and all those who created WoT fansites, for creating a new place for people like me to discuss and share this series.

Next:
Book 9 – Winter's Heart

 
Previous:
Book 7 – A Crown of Swords
Book 6 – Lord of Chaos
Book 5 – The Fires of Heaven
Book 4 – The Shadow Rising
Book 3 – The Dragon Reborn
Book 2 – The Great Hunt
Book 1 – The Eye of the World

Wednesday, November 9, 2011

How to Easily Format an eBook [3] Convert / Verification

This is the 3rd post in my tutorial about formatting an eBook for Kindle or Nook. You can read the first post about overall text formatting here. You can read the second post about title pages and a table of contents here. This post deals with the final step, converting your text into the requisite eBook file for Amazon or B&N and verifying it.

Once all the formatting and features are finished, you are ready to convert your file into an eBook file. For Kindle you can use .mobi and for Nook you can use .epub. You can create both from the same initial Word file, so the entire process is very easy.

Save as Filtered HTML
The first step is to save your Word document as Filtered HTML. An eBook file is really nothing more than an HTML file, so by saving as one initially you've have done half of the work already. Saving as Filtered HTML preserves all the formatting of the Word document, but removes much of the tags that Word/Office use for their specific functionality, cutting down on file size and tags that have no place in an HTML file.

To do this, merely do a "Save As" in Word (F12) and in the Save as type dropdown at the bottom, select "Web Page, Filtered."


Below that dropdown, to the right, you'll see a tag called "Title" (which might say Add a Title next to it, or already have a title from your file in it). Make sure this is set to the title of your book.  Select and change it if necessary.

When saving, save it two times – one with a filename that denotes it for Kindle, and one for Nook. That way you can convert each one separately in Calibre without any issues. If you want, update the type of edition in the Copyright Page for each to denote that one is the Kindle Edition and one is the Nook Edition.

Once saved, you can move on to conversion.

Calibre
The software I've used to convert my books is Calibre. You can find out all about it on the Calibre website, calibre-ebook.com. It can be used as an eBook manager if you so desire, but I only use it to convert files. It's very easy to do, and it has the added bonus of being free. The conversion discussed in this tutorial will only use Calibre.

First of all, download and install Calibre. Once done and the program is opened on your computer, you'll notice that there are a lot of options and it may be a bit overwhelming. No worries, there are only a few steps you need to take.

Add/Update Your Book
The first step is to merely add your book to the list in Calibre. Click the "Add Books" button at the upper-left and navigate to and select the HTML file for your book. If you have more than one HTML file (if you saved one for Kindle vs. Nook), then add each separately. Anything added will appear on the eBook list in the middle of the main window, like so:


From there, you'll need to update your book settings so that everything is set for when you convert the file. Highlight the book in the list and select the "Edit Metadata" button on the toolbar at the top, or right-click and do the same thing. Either way, the Edit Metadata dialog will appear:


Make sure to update the Author(s) and Author sort textboxes appropriately. The Title and Title sort should be set, but update them if they are not. I believe the sort is only used in the Calibre list, but it doesn't hurt to be accurate with them.

This is also where you are going to attach the cover for the book. For publishing on Amazon or B&N, I suggest having two sizes of your cover: 600x800 and 180x240. The first will be used in the eBook itself, while the other can be used for uploading to the Amazon and B&N websites. In Calibre, select "Browse" in the Change cover section and navigate to your 600x800 version.

Also, remember to update the Date and Published fields to denote when you actually created/published the eBook file. Click "OK" when you are ready to save the updates.

That's really all you need to update on the file. Now you are ready to convert.

File Conversion
Merely select your book in the list and click "Convert" on the toolbar. It will bring up a Convert dialog, and if you already did all the updates mentioned in the previous section, there's only one thing you'll need to change. In the upper-right corner, there is a dropdown for Output format. Change this to the desired format – MOBI for Kindle, EPUB for Nook.


Once your desired format is selected, click "OK" to convert. It will take a handful of seconds to process. Once done, you can find your final file in the book's folder wherever you designated the Calibre Library to be on your file system (during installation of the program). That is the file you will use when submitting to either Amazon or B&N.


Verification / Quality Assurance
Before you submit, however, you should always check the file in the target eReader to make sure it appears as you want it to. Generally, if it looks good on Kindle, the Nook version will look just as good.

I do most of my checking on Kindle, since I actually own one. You can easily copy your file to your Kindle by merely plugging the USB cord that comes with your Kindle into your computer. Copy the .mobi file and paste it into the high-level Kindle directory where all the other books on your Kindle are. Disconnect the Kindle, turn it on and check out your book.

For help on transferring files to your Kindle, check here.

If you don't have a Kindle handy, you can easily check using the Kindle Previewer program, which can be downloaded here. It's a simple program that will open any compatible file so you can see how it would appear on a Kindle.  Be aware that this is not the Kindle reader app for PC - you cannot add a custom book to that app.  If you want to look at it on your PC or Mac, you'll need to download the Previewer application.

Change the font style or size. Test out the Table of Contents and the links there. Make sure all your special pages (Title Page, Section/Part Breaks, etc) look sufficient. Nothing will look that good in super-large fonts, so don't worry about those; just test the smaller fonts that most people will use.

Another important thing to check is whether the paragraph indents are working properly (based on the steps taken in the first post of this tutorial). Unfortunately, the only way to really know if all the formatting is okay is to actually read through the entire book on your eReader, making note of each instance that needs to be fixed (I do a final reading in this fashion, using the Note feature of the Kindle to mark areas for adjustment).

To test on Nook, I merely used the Nook app on PC and my Android handset. You can find all the versions here. Nook functions pretty much the same way – if it looks good on Kindle and the Table of Contents work, chances are it will work on Nook as well. But it's a good idea to try it out on at least one version of the Nook app (or the Nook itself, if you have one).

Next Steps
All that's left is to get them published on Amazon or B&N. I'll leave how you do that up to you... but hopefully someone has found these tutorials helpful in some way. Post a comment if you have any questions.

Shameless promotion: If you want to see how this all looks in final eBook form, download a free sample of my book in Kindle or Nook formats. You could also try reading it as well. ;)

Friday, November 4, 2011

The Wheel of Time [7] A Crown of Swords

This is Part 7 of my continuing series of blogs regarding what may possibly be my last re-read of The Wheel of Time, in anticipation of the 14th and final book releasing in 2012. Please see this blog post for an overview of the re-read and why I am blogging about it. Warning: CONTAINS SPOILERS FOR THE ENTIRE SERIES. The best way to approach this retrospective is via your own re-read. If you have not read the entire series yet, you may want to wait on reading this.




Book 7: A Crown of Swords (1996)
I don't consider this volume part of any "trilogy" within the overall sequence, like I have for the previous volumes. It's more of a bridge between the first half of the series and the second half. It's the end of the fast-paced adventure that the characters have gone through thus far. Many readers mark this volume as the beginning of the slowdown of the series, but for me that comes in the next few volumes.

I've always liked A Crown of Swords; I felt it was almost as good as the last few, but not quite there. It features the same elements/pattern as previous novels: a few major events, a new land/city to explore (Ebou Dar), the death of a Forsaken, Rand conquering another nation... but here is where Jordan begins some trends that change the tone and pace of the next "trilogy" (Books 8-10).

Thoughts Then
Before we get into that, though, let's go back to when I first read the novel. It was 1996 and I was just finishing up my sophomore year at the University of Nebraska. The release of this one was a bit odd because it was the first time we had to wait two years for a book, it came out in the spring and it was shorter than the mammoths of Books 4-6. It was along the lengths of each of the first three, but I felt letdown because I had come to expect the lengths of Books 4-6.

I don't remember getting this or actually reading it the first time. What I do remember is that I was mildly disappointed at the end. Both because it was much shorter than the last few, and because I didn't feel like much had happened in the grand scheme of things (on the road to Tarmon Gai'don). I was also disappointed that Perrin got short shrift again in this book. At this point the only thing of importance Perrin had done since Book 4, The Shadow Rising, was help rescue Rand at Dumai's Wells.

I wasn't at the point where I started to feel like he was milking the series a little. That comes later.

Thoughts Now
I have a completely different view of this book now, having read the entire series up to Book 13. Realizing that Rand and friends will hit some roadblocks in the future and how that fits into the overall arc of the story – I have a better appreciation for what Jordan was doing with this and the next several books. I still don't enjoy them 100%, and I have issues with Book 10, but I get the point.

However, the drawback is that such appreciation can really only come when you've read the entire series once already. Jordan could see it and he knew what he needed to do, but it's hard for a reader to understand and see that vision when they have to wait 2 years between volumes.

Re-reading this has made me think about another current series that is taking forever... George R.R. Martin's A Song of Ice and Fire. Like many, as a reader I sometimes get frustrated with long waits and seemingly glacial pacing and lackluster user reviews of later novels in a series like that. However... if you do get involved a series like this, there is a level of trust the reader has to put in the author, and a commitment the author has to put to the reader. The reader must be patient and the author must reassure them that their investment in the series will be worth it.

Can you put your trust in the author?

"Don't worry, I know what I'm doing. Trust that I will get you there," the author says (or should say). It may seem like Jordan might be losing his way in this volume, but he's not. The story has changed, that's all.

So What Happens?
Not a whole lot... though it is enough for a full volume when you're reading it all straight through. Pretty much nothing happens with Egwene and the Salidar Aes Sedai, other than them leaving Salidar. We get to experience Ebou Dar, which I now picture in my mind as Venice, having visited there a few months ago and knowing what such a city looks like firsthand.

You get a random chapter with Forsaken, who seem to be wasting time and goofing around with inconsequentials like the Shaido (which we learn later in Perrin's storyline are just a major distraction to the main storyline). A little something with Morgase, a little something with Elaida.

There are only a few major events here, which led to my initial disappointment back in 1996. Nynaeve finally breaks her channeling block – one of those "cool things" she does after being super annoying for a few chapters. Let see... oh, the Seanchan finally return and take a few cities, Elayne and the others find the Bowl of the Winds and Rand abruptly launches an attack on Sammael, who dies at Shadar Logoth. Rand becomes King of Illian. A few of the sequences are very cool, but they only take up a handful of chapters.

Oh, and there's the appearance of Cadsuane. I don't like this character and she is my least favorite of the series. I even like her less than Sevanna. I suppose that means Jordan wrote her well. But I've never liked how she just suddenly appears in the middle of the series and is this super important person that all Aes Sedai are in awe of and who's a bitch to Rand. Not one mention of her before? Even though Jordan said it was all planned, I have a hard time shaking the feeling that she was added to the storyline as he went along. Maybe it's because I hate this character so much.

If I were casting Cadsuane, I would choose either Meryl Streep or Judi Dench, who can both be nasty old women.

I'm sure there will be more on Cadsuane in later blogs. Just wanted you to know how much I dislike her.

New Wrinkles in the Telling of the Wheel
Along with not much going on, Jordan starts doing some different things with this book. One is that he jumps around in time much more than before. There are a few sections in this book that actually happen during or before the end of the last book (the Dumai's Wells sequence).

You have Dumai's Wells from the viewpoint of the Shaido Wise Ones. You have the immediate aftermath from the viewpoint of Gawyn and the Younglings. Those aren't too bad; they are in the Prologue, so it's not that jarring to read.

But much later on, in Chapter 8, is the scene where Moghedien escapes. Now, this was shown at the end of the last book. I had forgotten about the jumping around here and it confused me at first. It's a bit strange to suddenly jump back to the end of the last book when you're 25% of the way into the next one. Couldn't this have been shown earlier? Or maybe picked up from the moment after Moghedien escapes?

Jordan does more manipulation of time throughout the next few books, and with the amount of characters (and particularly the wait between books back in the day) it can get a bit confusing keeping track of all of it. Particularly when you realize that A Crown of Swords only covers about 11 days total – the shortest time span for a single novel in the series, according to Dragonmount.

The Worst Picture of Rand... EVER
Onto the cover. Yes, we're talking about the Darrell K. Sweet cover.  Again. Is that really supposed to be Rand on the cover? Really? Take a look for yourself:

No comment.

I actually thought it was a different character at first, but the reddish hair and the dragons on his arms confirmed my worst fears. Once again, I have to wonder what in the world Tor was thinking when they had Sweet do these covers. Rand has appeared on every cover so far (save The Shadow Rising, I really have no clue who any of them are on that cover), and not once has he looked the same between them.

Since when did Rand start rocking the feathered-back look? And did he shrink about a foot? He's supposed to be around 6'5" according to Jordan, but here he looks like 5'5". Later on Jordan said he gave up when it came to Rand's height in the Sweet covers.

And as usual, the completely incorrect Trollocs grace the back of the cover like they do for many of the others. Not worth showing.

Who is That Person Again?
This volume is where you might start to encounter characters that had appeared earlier in the series, but you can't remember exactly when. Like Teslyn and Joline in Ebou Dar... I drew a blank and had to go to encyclopaedia-wot.org (an extremely handy reference site) to figure out where they had come from and why. Also had to do this with Pura (Ryma Sedai, from Book 2, The Great Hunt, also from the New Spring prequel), who appears with the Seanchan that capture Amador. I knew I'd seen the name before.

Back in the day, before sites like encyclopaedia-wot, I would draw complete blanks, just kind of shrug it off and think, "If this person was important, I would have remembered them." Unfortunately there is a lot of that going on in the next few books. And in the end, many of these minor characters are not that important to the overall arc of the story. They help flesh out the world, expand it that much more, but many readers would not miss them had their scenes been skipped or handled differently, and the overall story would not have suffered much at all.

Along with this, there's a couple of very short scenes with an unnamed old man talking to Mat and watching him later on. It's thrown in there and I had to look it up because I had no clue who this was – had forgotten these details entirely. Come to find, it's Noal Charin, an important character later on, and the reader doesn't learn this until Book 9 (since Mat doesn't appear in Book 8, The Path of Daggers, grumble grumble). In publishing time that was 4 years. So easy to forget these random snippets here and there that are ultimately pointless. Just introduce him in Book 9, Jordan... most people will have forgotten about the mysterious old man by the time his identity is revealed.

The Alternate Paperback Cover
A Crown of Swords is notable because when it first came out in paperback, the cover was different. There was no Sweet cover like the previous volumes (yay!). It was simple, with an image of the Crown of Swords. Kind of like the current covers for A Song of Ice and Fire. Here it is:

So much better than any Sweet cover.  Looks professional.

I thought this cover was awesome. I was surprised they had changed it, but figured they were actually doing something about the crappy Sweet covers! Alas... 'twas not to be. I couldn't find the source, but I remember reading once that it was an experiment by Tor to see if they sold differently... honestly, I don't think it mattered since the series was selling hugely at that point (the next volume would be the first #1 New York Times Bestseller of the series).

They even made promo versions of The Eye of the World with a similar style cover. You can see it here.

Either way, I had a copy of this version. I don't have it anymore, since I donated all my paperback versions to a library. In hindsight I probably should have kept it for nostalgic purposes.

An Old Friend
If you read my first blog in this re-read, about Book 1, The Eye of the World, you might remember that I met my first friend in my new high school (Papillion-La Vista High School, in Papillion, NE) because of this series. His name was Brian Watson. We didn't keep in touch much the last year of high school and beyond, but I did run into him again, about a year after this volume came out.

My friends and I used to hang out at the local Denny's on 84th street, near I-80, in Omaha, NE. It's a 24-hour Denny's and we used to sit in the corner booth of the smoking section for hours late at night, many times just drinking soda or coffee for hours. As long as you bought something, they wouldn't kick you out for squatting.

So many hours of my young life spent here.

One time, Brian showed up. We got to talking and eventually the topic turned to The Wheel of Time. Brian mentioned that he had given up on the series since it was taking forever. I told him that the last few were pretty good and related some of the major events from them when he said he didn't care about spoilers.

We even started joking about how Jordan would probably die before he ever finished the series, at the rate he was going (the end seemed nowhere close with only 7 books out). How prophetic that observation would be.

I'm pretty sure that was the last time I talked to Brian – it was at least the last time I remember. I have no idea what became of him.

The Same Font
Something that struck me as I was reading this on my Kindle, is that the format of the text has been the same on the Kindle since the first volume. I don't know about you, but with some of these books that I've read so many times when younger, the font and font size actually make a difference in the reading of the book. It gives it a different feel from book to book.

You have something like Lord of Chaos, where the hardback has very small print, compared to A Crown of Swords,where the text is larger and there's a totally different feel to it. When you're reading them, you have a slightly different mindset with each volume, whether you realize it or not.



The font you use in an essay could affect the type of grade you get. The font used in advertising could make a viewer more receptive to the message. Fonts with serifs (as opposed to sans serifs) are easier for those with dyslexia to read, and many find serif fonts more sophisticated.  There have been various studies done on this and they make for interesting reads.  Search for them.

I have no doubt that publishing companies choose the fonts of their publications very carefully. Which makes eBooks interesting... because with the Kindle, I can select from 3 different fonts and it's not dictated by the publisher. What's more interesting, the font will be the same from novel to novel. This makes the series read differently for me, more than any re-read before. It truly feels like it's all the same set of writing. Once I finish one book, I just grab the next and continue. I don't get the different feelings from covers, fonts or line spacing.

So thanks, Amazon, for creating the Kindle, which allows me to experience this series in a whole new way, 20 years later.

Next:
Book 8 – The Path of Daggers
 
Previous:
Book 6 – Lord of Chaos
Book 5 – The Fires of Heaven
Book 4 – The Shadow Rising
Book 3 – The Dragon Reborn
Book 2 – The Great Hunt
Book 1 – The Eye of the World