text:
Welcome to the world of writer and game designer Guido Henkel
May 8
Many classic, scrolling arcade space shooter games used a technique that is commonly known as an endless starfield. It is a backdrop that is continually generated as players direct their ship through space, annihilating swarms of approaching enemy vessels. The traditional techniques that were typically applied to create these endless animated backgrounds at a minimal cost no longer work in modern environments, especially in game object-oriented frameworks like Unity, Unreal or Lumberyard. Time to remedy this because scrolling 2D space shooters are still every bit as much fun as they were 30 years ago.
In the olden days, starfields were created by writing individual pixels, representing the stars directly into the screen buffer. They were moved at different speeds with each frame update to create the illusion of depth. Because the screen coverage was much lighter than drawing a background consisting of bitmaps and required only individual pixel draws for the stars, it was extremely effective and freed up valuable CPU time for more important things, such as more enemies, explosions, and action on the screen.
We are no longer directly working with screen buffers in today's world and the classic technique no longer works as such. But then again, perhaps it does. All it needs, really, is a slightly new perspective how to tackle the problem, and, using the processing power of GPUs, we can do a whole lot more, creating an endlessly scrolling starfield that is a feast for the eyes.
We can add various effects to give it depth and wonder—just take a look at some photos taken by the Hubble telescope and you'll see how vibrant and colorful space really is. Ultimately, your imagination is the only limit in terms of some of the effects you might try to recreate.The Approach
A good-looking starfield will require a couple of hundred stars, if not thousands, in various sizes an colorations. We could create a couple of sprites and plaster them on the screen, but having a thousand game objects in your Unity scene, just to provide a backdrop is a bit excessive and unmanageable, not to mention the processing overhead this would incur, having to regularly update the thousands of scripts that would accompany each individual game object. Fortunately for us, Unity already has a component that is tailored to creating thousands of individual objects on the screen, fully optimized for performance—the Shuriken Particle System.
Ordinarily, a particle system is set up so that it will continuously emit particles that are then moving around the screen in a fashion that is determined by the many, many parameters the component provides. As such, particle systems can be very overwhelming and it may, in fact, be a component you have as of now stayed away from. The good news is that we won't be dealing with any of the confusing parameters. In fact, we'll turn the entire particle system emission process off and instead, we will simply make use of its rendering capabilities so we can draw hundreds of stars on the screen in a single batch. It does not get much more efficient than that, so let's get to it.Getting Started
Let's create a new 2D scene adjust the camera like in the screenshot below, creating a simple dark blue color backdrop.
Then we add an empty game object to the scene in the Unity editor and add a Particle System component to it via its "Add Component" button. Make sure to disable everything in the component settings, except for the Render entry.
In the Render portion of the Particle System, select the Default Particle Material, which, by default, creates a small circle with soft edges, using an alpha blending shader that is optimized for particles. Ideal for what we're trying to do for now. Later, if you want to go for a different look, it's easy enough to simply create a custom material and even use actual sprites to use as particles, but for the time being, let's keep it simple.
We now have a particle system in place that does not emit any particles and doesn't really do anything. Instead, we create a script, I called it
Starfield.cs, that will create individual particles and assign them to this particle renderer. [Note: If you see only pink boxes in your scene window, it means you have forgotten to assign a material to the particle renderer.]
The Starfield explained
The first portion of the code creates a few variables with default values that can be edited directly in the Unity editor. This allows us to fine-tune things as we go along.
In the
Awake() method, the actual initialization of our game object at the beginning of the game, we then create an array of particles and fill it with randomly created "stars." In order to make the starfield look more natural, we vary the size of the stars we create. The variable
StarSize determines the average size of stars, whereas the
StarSizeRange variable serves as a modifier to randomly scale the stars within the range of the modifier.
StarSizeRange is set to 0.5, for example, the random values we generate will lie somewhere between 0.5 and 1.5. If we change the value to 0.2, on the other hand, the range will be between 0.8 and 1.2. We then use this random value as a multiplier to modify the actual size of the star we are generating.
In the loop, we also select a random position for each star we generate and, if so desired, colorize the star. In nature, stars begin to have a slight red shift the further away they are—yes,I am extremely simplifying things, I know, but it will do for now. The code can apply such a shift depending on the size of the star, which I take as an indicator of how far away it is. We do this by leaving the red component of the color at a maximum while reducing the green and blue components slightly.
Once all the stars have been initialized, they are written to the particle system we previously added to our game object. Run the program and you should see something that looks kind of like this…
If you check the stats in Unity's Game window, you will see that all these many stars are drawn on the screen in a single render batch, using full GPU acceleration. The reason the display will say that two batches are active is that even in an entirely empty scene, Unity will always generate one batch to render the background color.
The real coolness of starfields is not effected by the stars alone, though. Their real beauty unfolds when motion is involved, so let's write a small scrolling script that moves the camera up along the y-axis at a steady pace, thus "flying" across the stars we produced. I call it
FixedScroll.cs and attach it to an empty game object.
This script has a variable that can be edited in the Unity editor to determine the scroll speed and during every
Update() call, it simply increments the y-position of the camera. Couldn't be simpler, really.
I could have also left the camera static and instead move the starfield, but if you want to use this effect in a scrolling shooter game, your camera is most likely attached to the player's ship, moving around, creating the scrolling effect. Therefore, an implementation in which the stars remain static while the camera moves seemed more sensible to me, just like it would be in a game level.
theCamera variable is used to speed up access to the camera position and avoid having to go through five levels of object hierarchy every time we update the frame. These types of hierarchy walks (Camera -> main -> transform -> position -> x/y/z) are extremely slow because they will regularly thrash the CPU's cache, forcing the processor to wait for the data to be loaded into its internal memory cache for every step. Using an intermediate variable helps mitigate that somewhat and is a coding practice I use very frequently as a manner of routine.
When you start the program, you will now see that the stars are actually floating across the screen as the camera moves, but as soon as the camera leaves the area in which we created the initial stars, the screen will be empty. We need a way to fill in new stars as we go.
There are two basic approaches to this. Either we create new stars and fill them in the area above the screen before they become visible, or we recycle the stars we already have. And that's what I'll do because it is so much easier and elegant. (Note: Before you ask, yes, that means they will be in a repeating pattern but, no, people won't notice because with everything else going on, they won't be able to concentrate on specific stellar constellations that fly by among hundreds of other stars by the time we're finished.)
To recycle the stars, we need to create an
Update() routine in our
Starfield.cs file, that is called periodically, and check which stars have moved out of view at the bottom of the screen. We then take these stars and simply feed them back in at the top. This is achieved by simply comparing the camera position to the position of each star as well loop over them.
As you can see, I have also added checks for x coordinates to make it possible for this script to handle movement in any direction and continuously fill in stars on any of the four sides of the screen as they fall out of the view on the opposite side.
Run the code so far and take a close look. In your Scene window, you can perfectly watch how the stars disappear and pop back up at the top.We Need More Depth
This is not bad, but we're still missing one key ingredient. Depth! A killer starfield has depth and looks like a peek out the porthole of the USS Enterprise. We can do this, too.
In Unity's Shuriken Particle System, every particle has its own velocity vector and we could use that vector to move every single particle at a different speed trying to create the illusion of depth. After plenty of experimenting, however, I found that it is rather tedious in a 2D space, to properly tweak all these velocities to get a uniform look that matches the desired effect rather than random spots streaking randomly across the screen.
A much more effective way, I found, is to use a few parallax layers, each representing a different viewing distance. Remember, what we are really trying to reproduce is a camera frustum, which means that we should really be seeing fewer stars that are close and a great many more stars that are further away.
In plain English, this means that we will create different layers of stars representing different viewing distances. In the closest layer we will keep the stars fewer, larger and faster, while we will fill the layers further back with many more stars, but keep them smaller and much slower-moving.
To allow for an individual movement speed of each layer, we will introduce an additional public variable in our
Starfield.cs script, called
ParallaxFactor, that can be adjusted in the Unity editor.
By default, this factor is zero, which means, the layer is locked in place and the stars will fly by at the same speed that the camera pans across the layer. If use a factor of 0.5, however, the stars will travel with the camera at half its speed and therefore appear to be moving at half the speed also. Similarly, a factor of 1.0 will lock the stars to the camera so they won't appear to be moving at all.
To calculate the proper position of each layer, during the
Update() method call, we simply multiply the camera position by our parallax factor and make it the position of our game object.
The next step is to create a number of Starfield game objects in the Unity Editor and assign them proper values to create our starfield. In my case, I created an empty parent object under which I inserted all the individual starfield layers to keep the hierarchy clean.
The most important thing now is to set up the parameters in such a way that it creates the desired effect of depth. Here is how I filled my parameters for an effect I like.
As you look over these settings you will notice that with each successive layer I am adding more and more stars while making them smaller and increasing the parallax factor. When you run your project with these objects in place, you should see a nice, dense starfield that scrolls across the screen as the camera moves across it and provides exactly the depth effect we've been looking for. One of the great things is that when checking the stats you will see that even though we are drawing many hundreds of stars, it is still achieved in a single render batch, making it extremely efficient.Add Some Atmosphere
While this effect is really nice, what is truly missing, are some atmospheric effects to sell the illusion. As I mentioned before, when looking at photos from the Hubble telescope, you can see that there is more to Space than just stars. It is full of color and all sorts of astral bodies. To kind of mimic the effect, let's add some "space haze." For that purpose, I created a tileable, colorful texture of some billowing fog.
Naturally, it is not enough to simply paste the texture into the scene. We need to wave our effects wand with a flourish to sell it to the eye and say Visual Effecto!
Like we did with the stars, we want to create the illusion of depth and we best achieve that with motion. The idea is to take the texture and make it highly transparent so only hints of it are visible. We then make a copy of it and flip it horizontally. With an alpha-blended shader in place, this will give us a fairly organic looking effect that gets even better when the textures travel at different speeds, as the color blending makes sure the visual changes constantly.
The first step to achieve this is by creating a material for the haze that we can then assign to the sprite renderer we will use to draw the haze on the screen.
As you can see from the screenshot, I selected the Alpha Blended Particle Shader that Unity offers. Particle shaders are typically kept fairly simple and optimized for speed because they are often used to draw thousands of particles on the screen and should not choke the engine.
Next, we need a script that allows us to control the scrolling of the haze. Like we did with the stars, we want to create a parallax effect, so the principle is the same as before, offering a variable in the Unity editor that allows us to adjust the parallax speed.
As you can see, I've also included a small method that will repeat the texture endlessly. It works in tandem with a second, identical object. To make it work, I am stacking the two haze objects on top of each other along the y-axis. By lining them up seamlessly, they give me a long stretch of texture. The script attached to these objects will check when the object is becoming invisible at the bottom of the screen and will then simply stack it right back up on top of the other.
I then repeat the same thing, creating a second layer that is flipped along the x-axis to avoid visual artifacts. I also give it a different parallax speed, so that it moves differently from the previous layer. Because the haze texture is kind of undefined and without recognizable details, these two parallaxing layers will create the effect of drifting haze that has actual volume.
When you run this, you will see the beautiful quality of the wafting haze as the two layers drift against each other. Notice how they are undulating and highlighting different areas that are forever changing. It looks very organic but we can improve it even further with a really simple trick. We can change the opacity of the two layers as we go along, creating an even cooler effect where the layers of haze will fade in and out of each other almost unnoticeably.
For that, I create a simple fader script called
HazeFader.cs that I attach to the parent object of each haze layer.
Upon startup, the script picks a random fade value and a random duration. It then uses iTween, a free, external plugin that I am using very frequently, to fade from the current opacity of the object to the end opacity value determined by the randomizer. Once it reaches that end value, it repeats the same steps over and over again. This way, the script will constantly fade the texture in and out at random intervals using random opacities.
Start(), the script goes through each of the parent's child objects and adds its respective renderer component to a list so it can be accessed quickly during the periodic method calls to update its opacity. It then starts the first phase by determining the random values and feeding them into iTween.
If you've never worked with iTween before, the call might look a bit confusing, but it is really very simple. iTween is extremely powerful and will handle virtually any need you will ever have to manipulate objects and values over time.
This call tells iTween for lerp between the "from" and the "to" values over the time period provided in "time," starting after the delay period provided in "delay." During each update, iTween will call my own
Fader() function, passing this lerped value into it as a parameter. Once the lerp is complete, iTween will call my own
StartPhase() function, which I use to restart the entire process.
iTween has many more parameters that give you full control over the process and you can apply it to virtually any object in your scene. Feel free to check out the documentation on the official website. Quite frankly, to me, iTween is the single-most valuable plugin for Unity and I find myself using it in every project to move, scale, rotate, fade or colorize objects, or to have them float along paths.
There you have it! Our completed scrolling starfield!
Now it is up to you to experiment with it. Try to change up the parameters and see how it affects the look and overall effect. A good exercise would also be to try and colorize the haze layers so that they gradually change color over time. Use iTween to affect not only the alpha channel of the haze but the other colors as well and see how it turns out.
In my own build, I have also added a nebula, for example, that I placed along the way so that at some point it scrolls through the image. I am attaching a very simple parallaxing script to the object—the same as the ones we discussed here—so I can adjust how quickly it scrolls through the scene. It doesn't require any further logic, so it passes once as a visually striking highlight and is gone forever.
Please share with me how your own experiments go and if you find any cool effects that help further heighten the illusion. I would really love to hear from you to see how it turns out for you and how you've used it in your own projects.
Oct 9
How much time did you spend thinking about the impact your print layout has on your profit margin the last time you did the book design for your print-on-demand book? The answer is probably none at all.
Many self-published authors are all too happy to jump in with both feet to create their own print layouts for Createspace or Ingram. You might even use templates provided by one of the many sources available on the internet to do it yourself. After all, you know your word processor and nothing could be easier…Word processors make it easy… but do you do it right?
I admit that word processors today are highly professional tools, but that doesn't help you if you don't know how to correctly utilize these pro features. It's like purchasing a $50,000 stereo system to play back the recording of a scratchy vinyl on a tape cassette. You are missing the point.
In regards to my opening question, if you've never really thought about the impact your book design and layout has on aspects such as production costs, you have been missing one of the key parts that set you apart from professional book designers whose job it is to create the best possible layout for you.
Things as mundane as font selection, line spacing, paragraph spacing, and margin settings have a tremendous impact on the final result. Not only visually but also from a production cost aspect. If a different line spacing cuts down your total page count by 25 pages, this means more money will end up in your pocket because printing the book has just become noticeably cheaper.
If your font choice just added 10 pages to the total page count, you cost yourself money because your printing costs just went up.
And sometimes, simply reducing the length by a single page can save you money, if it means the printer will require one less sheet of paper to print the book. Seems like nothing, but considering that books are printed on large sheets that typically hold 8 or 16 book pages, this is, indeed, a real cost factor. Depending on your case, the difference could be as much as 10 cents!
Before you run off and make your font or line spacing smaller, though, hear me out. Quality book design is not as simple as that. In order to improve readability, there are certain standards that need to be followed. Otherwise, you will end up with a wall of text that no one wants to read. A book layout needs to strike a balance between text and white space—always!Case in point…
I recently worked on a series of book projects where the author wanted to compete with the price point of mass market paperbacks, something that is almost impossible to do for authors using print-on-demand publishing. He had prepared and published these books himself, each at around 420 pages, give or take. With that page count, it was physically impossible to compete with mass market books, and he approached me to hear my thoughts.
My recommendation was to bring down the page count so that his print costs go down, which he could directly use to lower his price point. I redid the layout and ended up saving him well over 40 pages. Most books are now somewhere in the 350-page range even, saving him almost 70 print pages in some instances. That is a tremendous difference. He ended up saving almost $1 per book sold. Multiply this by a series of three books, each selling a couple of hundred copies per month. I don't think I have to do the math for you…
But here's the kicker. He felt the books looked even better than before. And that's the key here!
I did not simply reduce the font size or changed the line spacing—I re-designed the layout. This means, I carefully selected the right font, one that runs narrower and smaller without trading off readability. This new font choice also allowed me to adjust line and paragraph spacing, gradually bringing down the page count into the range he had envisioned. In the end, we ended up with layouts that looked more pleasing and more professional, while also dramatically reducing print costs.
In his case, this exercise served to allow him to reduce the retail price of his books, but that doesn't have to be the case for you because you can use this cost reduction also to increase your profit margin. If you leave your retail price where it is but it costs you 50 cents less to print the book, you are quickly seeing additional dollars mounting in your bank account.Book design is a deliberate process of skill
Let me stress again, however, that this was a very deliberate process, and that I've been trained to do these kinds of things. I did not arbitrarily replace one font for another or simply adjusted settings. This book design change was all very deliberate and the result of years of experience as a professional book formatter and book designer. Without the proper balance, you can just as well completely ruin the experience for your readers, a risk no one should take, especially because professionals like myself are more than happy to assist you in your journey, and work with you to create the perfect book for you. One that looks the best it can, while also taking commercial requirements into consideration. Contact me for more info if I've piqued your interest.
Feb 15
This article is a repost of a featured blog post I wrote for Gamasutra.com
But things have changed. Despite the doomsaying, the genre survived through adaptation, by streamlining gameplay features. Computer roleplaying games (CRPGs) became more accessible and began to appeal to a larger audience and as a result, it is safe to say that today's CRPGs are mainstream titles that have very little in common with their ancestors from the 80s and 90s. In fact, one could argue that they have very little in common with roleplaying games, period. (Please note that this excursion does not take into consideration the games stemming from the resurgence of retro RPGs in recent years, of course, as they are an intentional throwback to classic design paradigms.)
Despite their mass appeal, to say that contemporary CRPGs lack feature-depth and are too shallow would be a manifest oversimplification of the game mechanics at work, and truly a misrepresentation of the state of CRPGs. Quite on the contrary, these games do, in fact, have a lot of depth and they do have a lot of features. It is the way they are presented and employ these features, that generates the impression of overly shallow gameplay.Limitations have changed
The early CRPGs the industry produced were all severely limited by technology. Slow computers, sparse memory, expensive storage and low screen resolutions all held back the full potential of these games. As a result, CRPGs were forced to focus on certain aspects of the roleplaying experience and drop others entirely. But hardware improved over the years.
Realms of Arkania 1 – Blade of Destiny
When we started development of the Realms of Arkania games in 1989, it was our goal to duplicate the experience of a pen&paper roleplaying session as best as we could. While we may have gone overboard in terms of detail and overwhelmed players with depth in the process, the games offered unsurpassed flexibility in many ways. It is the reason why they are still so popular today and have fan communities dedicated to and re-playing them even 25 years after their release. But make no mistake, even those games were severely hampered.
In today's world, technology is no longer truly a limiting factor, and yet, computer roleplaying games have moved farther away from their pen&paper origins than ever. Perhaps it is time for the CRPG genre to re-examine itself—a necessary step if we want to take the computer roleplaying genre to its next evolutionary rung.
Virtually all triple-A computer roleplaying games have been reduced to a very simple formula. You run around, you fight opponents, you talk to friendly NPCs and you follow fairly static quest lines. In most cases, the player will feel fairly detached from the actual experience because the in-game auto pilot makes sure you never have to invest any of your own thinking prowess or imagination, or read a single line of dialogue for that matter—though you will have to click mindlessly through them. You'll never get lost either because the mapping features will always let you find your way from quest point A to point B without deviation, and if you are lucky, once in a blue moon, you may actually be allowed to make a decision that has some sort of consequence. Puzzles are exceedingly rare and when you stumble across them, typically at the end of a dungeon, they have the solution already built-in or are of a rather mundane arranging or do-something-in-the-correct-order kind of sort. Anything, really, to make sure the player never gets stuck or even held up for more than a few seconds.Real roleplaying is about choices
Not that this isn't fun, but a real roleplaying game is a much different affair than that. What we are looking at here is a mere skeleton of the original genre, boiled down to its bare essentials, and then some. Alternative solutions to problems and paths are usually not available.
But what if you don't wish to fight an opponent? Why should you feel a need to attack every single breathing being in the wilderness, just because they appear unfriendly? What if you want to barter with a troll instead of gutting him with a spectacular finishing move? What if you'd rather charm your way out of a situation? What if you would prefer to sneak up to and steal any quest artifact without having to kill the enemy? Very few games will offer you any of these options unless they are specifically part of the desired solution path.The illusion of freedom
Most everything in these games is running on a track, fixed in place and predetermined with very little effect in the grand scheme of things. The open world design of today's CRPGs will give you the illusion that you can do whatever you want but the freedom of an open world is really all in the exploration. (That, in itself, is actually quite impressive and something old-school games could never replicate.)
Sure, you can tackle many quests out of order, but only because they are of no relevance and don't tie into the world narrative as a whole, leaving the game universe still somewhat anemic.
Occasionally, certain storyline events and quests do change over time, though for the most part, they are encapsulated, pre-scripted and limited to key events in the game, not the gameplay experience as a whole. So when it comes to actual roleplaying, how much freedom of choice is really left?
In fact, most modern CRPGs play like MMOs in some sort of single-player mode, filled with repetitive and often banal quests that turn the experience into a level grind rather than an adventure.Stop killing the play part in games
Originally, it was a boon to let the computer take over some of the menial tasks for players. Drawing and annotating level maps on grid paper were not everyone's interpretation of fun, so very quickly, CRPGs added auto-mapping features and journals to keep track of quest assignments. But have we gone overboard with it?
Today, with the computer tracking and mapping very quest destination, every crafting resource, blacksmith, bandit camp, grindstone, and store, along with every important NPC, every dungeon entrance, and every campsite, some games will even conveniently plot a path to your next quest destination for you. Where is the play left in this sort of roleplaying? We have created games that no longer necessitate players to think for themselves. It requires no imagination and moreover, the game is robbing the player of many of the exciting details that made classic roleplaying games so memorable. How many people got lost in the Snare in The Bard's Tale 2 and still remember it today? I know, I do.Dialogues as filler material
Interestingly, even after all these years and with all the advancements in technology, dialogues are still one of the weakest spots in CRPGs—though clearly, some games fare better in that department than others. In Witcher 3: Wild Hunt, for example, dialogues are really just window dressing to get players to click on a certain response to advance the conversation or plot and, predictably enough, it is usually the first entry in the dialogue selections. Dragon Age: Inquisition, on the other hand, has a more complex approach that is less predictable and does at least create the impression that different selections will generate vastly different outcomes, even if that is truly the case only on occasion.
Dragon Age: Inquisition
As a result, dialogues and the accompanying cinematic sequences often feel like tedious roadblocks and filler material instead of an actual development in the overall world narrative.
Traditionally, roleplaying games were not that simple, mostly because they feature a living, breathing, human game master, of course, but also because of the way these games were designed. A maximum of freedom was the key, to enable players, while, at the same time, forcing them to make decisions almost constantly. As I mentioned before, much of a CRPG's gameplay revolves around exploration, while that of a traditional roleplaying game revolves mostly around problem-solving. These are very different fundamentals shaping the overall experience and the resulting approach to game design. One is leading the player, the other is challenging him.
You will be hard pressed to find a contemporary CRPGs that is not leading the player from beginning to end. From one quest point to the next. You don't even have to explore the beautiful open world to find them. They are plain to see on the map and much of the gameplay is reduced to a walk (or ride) from point A to point B where you will be confronted by either a monster or an NPC, stringing you through a dialog, which in turn will inevitably take you on a detour to the next quest point.Let players use their imagination for a change
When roleplaying games went through their streamlining process in the early 2000s, a process which took them to their current mainstream formula, the focus has always been to make them more accessible, easier to manage and learn. The computer auto-pilot I mentioned before was a significant part of that process, stripping away a lot of the nerdy data work. Interestingly enough, however, today's roleplaying games often still carry a lot of statistics with them. Not so much in terms of character attributes, dice rules and advancement exceptions, the way classic CRPGs did, but instead in the form of skill trees. Skill trees have become such a trope in computer games that you can find them everywhere these days, even in pure first-person shooters. In a roleplaying game, however, they do miss the point of the actual game when employed incorrectly.
As I mentioned, traditional pen&paper roleplaying is all about problem-solving and as a result, it involves a lot of trying things out. The player brings the imagination and the skills of the game character are used to overcome precarious situations and challenges. In return, these skills are improved over time through their usage. Learning by doing. Too many CRPGs completely ignore this aspect of character development. Instead, they simply weigh down every character with all possible skills relating to his class and profession, all neatly laid out in an array of skill trees. It is a way to impress players, creating the impression of roleplaying depth and versatility. While keeping it manageable, one skill advancement at a time, the reality of it is, if your Level 5 warrior has never once wielded an ax, there really is no need to burden the player with all the excess baggage that goes along with the skill trees relating to axe-wielders. At this point, it is nothing but bloat.Unique character growth is key
The progression of a character is important, the ability to grow and distinguish the character, make him unique. Most games directly tie distributable skill points to level advancement. No real growth of the character through learning takes place. You killed enough monsters or solved enough quests to gain a level? Here is a skill point. Do with it what you wish. It works from a technical standpoint, but as a true roleplaying feature it is too disjointed and simplistic. When a game goes so far as to allow the player to accumulate so many skill points that he can unlock virtually every branch in every skill tree, the aspiration of unique characters has been lost entirely.
An approach that is much more in line with roleplaying sentiments is that found in The Elder Scrolls: Skyrim, where the character has (invisible) attributes that increase through usage and translates them into potential skill advancements. You still have to deal with the clutter of twenty unrelated skill trees, but at the very least, the game really invites you to use skills and grow them through play. (In fact, Skyrim is the game that has, perhaps, created the most roleplaying-like experience in any CRPG to date on numerous levels.)
From a story design perspective, contemporary CRPGs are richer than they have ever been. Main story plots, legendary storylines, subplots, class quests and the like weave a dense world that is brimming with content, no doubt. It is truly staggering, the amount of content found in games like Skyrim, Dragon Age: Inquisition, Fallout 4, Final Fantasy XV or Witcher 3, to name just a few. Yet at the same time, they all tend to share one weakness. Believability.Make me believe in your world
Here you are, a tough-as-nails adventurer, long time teacher, and master to acolytes, taken down by a Level 1 rat. Nothing says world-saving hero quite like getting killed by a rodent the size of your fist. Surely, we as an industry can do better than reiterating these same old clichés. If your story centers around a character that is experienced and represents a master in what he does, then the in-game character should properly reflect that. He may still start at Level 1, as it relates to the game, for all I care, but at the very least the opponents he faces should be properly matched, as should the quests and the respect the character receives within the game world.
Despite their wealth of world content—or perhaps, because of it—virtually all contemporary CRPGs are completely lacking social awareness. When thinking of AI in games, we typically associate it with smart pathfinding, and overall movement and state behavior of (enemy) entities, but never really with social behavior. As a result, in 2013, I crafted the template for a design called the Psycho Engine and published an outline of it as part of my Deathfire roleplaying game that I tried to fund on Kickstarter. It describes the building blocks of an artificial intelligence system that can be used to make characters in a game aware of any number of factors, namely other characters, their strengths and weaknesses, peccadillos, history, achievements… virtually anything.
During GDC 2014, Bioshock creator Ken Levine explored a similar concept that he called "Narrative Legos," which essentially serves the same purpose—to track and provide information to in-game entities in order to affect the narrative flow of a game. Later that year, Shadow of Mordor was released, and with it the Nemesis system, which, for all intents and purposes, is a lite version of my Psycho Engine design.Richer games through NEW technology
For some reason, no other game has since made use of similar technologies, which is disappointing because it would allow for incredibly rich narratives that directly adapt to the player's actions and achievements. In current games, you play a hero… an unsung hero, one that no one knows and no one recognizes. All the hard work the player puts into the game remains mostly unappreciated by its inhabitants. Things at the Jorrvaskr in Skyrim never change, for example, not at the start of the game, not during the lengthy adventure and not after you've completed all the storylines and DLCs. It, like almost everything else in these game worlds, feels static. It appears as if simply having enough having NPCs walk around the premises is mistaken for actual depth in most games. Without the mesh of an in-game society and culture, they are nothing but gameplay noise.
After completing your favorite CRPG and beating the ultimate bad guy, do you feel like you really made a difference? You closed rifts, killed evil warlocks, killed their dragons, but do you feel that you truly made that world a better place? That you have actually achieved anything of value?
I usually do not. I feel unfulfilled because there is no social awareness of my achievements in the game universe. Dragon Age: Inquisition is a game that touches upon it to some degree. The Inquisitor (player character) is recognized and respected—or disrespected—throughout the game world, but it is no real social awareness based on individual achievements. It is rather built into the character and the main storyline. The player ALWAYS plays the Inquisitor—from the very beginning. He doesn't become him or her!
Real social awareness would recognize the player's deeds and the world around him would react to it. People would talk about it, ask him about his experiences, tell other people about it in taverns, actually creating an in-game reputation for the character based on his actual achievements rather than sporadically, along predetermined lines.
The Elder Scrolls V: Skyrim
Out of all the game mechanics, this kind of social awareness and world response to that awareness is probably going to be the landmark that will take CRPGs to their next generation. The excitement created by the Nemesis system, regardless of how shallow it actually was, is a clear indication that players are looking for this kind of in-game feedback. When properly implemented, it can create a completely new sense of gratification for players that does not require the constant slaying of anything that moves. It will take the roleplaying aspects of these games back into finely delineated facets and allow computer games to much more accurately resemble real life roleplaying sessions.Real worlds wanted!
It has been almost 20 years since Baldur's Gate steered the RPG genre away from the abyss of oblivion and took it to a more mainstream audience. It has been almost equally long since Everquest popularized true open-world design in the genre. However, in the long years since, the design of computer roleplaying games has evolved very little. The visuals may be more dazzling, the storylines ever more complex, and the worlds ever larger, waiting to be explored with their rich tapestry of flora, fauna, and denizenry but at the core what they have always been truly missing is a beating heart.
As I play through the current fare of CRPGs I can't help but feel the genre has stagnated and has become utterly formulaic. I strongly feel that it is time for the next step in the evolution of the genre. Let us make use of the technologies and incredible processing power at our disposal for more than stunning visuals. Let us turn the computer into a real Dungeon Master, a storyteller who weaves a narrative fabric as we play along, who is sensitive to the way individual players behave and tackle the game, who challenges the player in accordance with his unique strengths, weaknesses, achievements and playing style. Someone who knows how to force the player to make decisions of consequence.
These are just some of the ideas and design paradigms I have been accumulating over the many years that I've been involved in the development of computer roleplaying games. But even these glimmers should give you an inkling of the kind of brand new experience one could create if applying them to a new roleplaying game. Are you up to the challenge? I'd love to help.
Jan 26
For 30-odd years I have been developing computer games. Over that period of time, I have seen many changes, both in technology as well as in general game design.
As I look back, however, I find that things are not always just moving forward, as we blindly assume. It pays to look back on occasion, to learn from the lessons of the past. Many of the challenges game developers face today are not altogether new, and close examination may reveal that vintage methodologies may still do the job.
Let's take the subject of load times, for example, one of my pet peeves with many modern computer games.
On my Commodore VIC-20, the first computer I owned, programs were loaded using a datasette, a tape cassette recorder that was slower than a slug crossing a puddle of ice. What was worse was that datasettes were prone to loading errors, which meant that there was always the possibility that the last 10-minutes worth of loading were wasted because the program had not loaded correctly and you'd have to redo it all over again—after adjusting the tape head with a screwdriver. (Strange that we all look back so fondly on those days, as we reminisce about the good old days, isn't it?)
The arrival of floppy disks improved things a bit, but as the data throughput became faster, the amount of data we needed to load grew exponentially along with it. In the end, loading times remained long and disk swaps became insufferably tedious.
Hard drives arrived and made things a whole lot easier, and faster, but alas, following Moore's Law, once again, the hunger for data outgrew performance exponentially, despite the fact that drives became faster and faster. Today, even a solid state SSD-drive seems too slow to handle your everyday office software appropriately.
In today's games, it is common that gigabytes of data have to be transferred from a storage medium into the computer. High-resolution textures, light maps, dirt maps, geometry, audio files and other data create a bottleneck that very quickly slows down the load times of any game.
When we first encountered this problem in the 80s, the most common approach to reducing load times was to encode data. "Know your data" was a key mantra at the time. If you have set of data and you know it's entirely binary, why waste 8-bits on it when one will do? In this fashion, data could oftentimes be reduced to a fraction of their original size, thus reducing load times.Mark Nason Los Angeles Női Debbie Sneaker Rózsaszín Wolky Comfort cipő holland cipő 10070 fekete nubuk Mephisto Női Cross Walking Shoe Pewter Bucksoft / Sötét Taupe Fashion / Bronze Reflect K-Swiss Női Novo Demi Fashion Sneaker Krémszínű tál / fehér Me Too Női Halle Ballet Flat Kék Champagne Denim , Trotters Női Sizzle Ballet Flat Bordeaux , SoftWalk Női Adora Flat Tópszín RYKA női luxus mule Földi szeder , Romika Női Ibiza 87 Flat Sandal Fekete Via Spiga Női Edie bokacsizma Csont bőr SJP a Sarah Jessica Parker női Minnie 75 bokacsizma Fekete bőr STEVEN Steve Madden Női Jazlyn lapos Természetes Suede , Bella Vita női Landon bokacsizma Almond Kid Suede Walking Cradles Női Hayden Loafer Fekete bőr ECCO Női Bluma Slip On Ballerina Flat Moon Rock Naturalizer Női Stella Ballet Flat Fekete Klogs Klogs Klogs Fekete szerszámozott CLARKS Női Tamitha Rose Boot Sötétbarna bőr Via Spiga Női Edie bokacsizma Cuio Suede , Carlos Carlos Santana női Laney bokacsizma Konyak , Laredo férfi hosszútávú csizma Fekete Chooka Női Tall Memory Foam Rain Boot Fekete Summitfashions Női fekete térd magas csizmák tüskékkel és ujjcsont alakú 5.5 \ , FRYE Női Sacha Tall Western Boot Barna DailyShoes Cowboy rózsa koponya virágos nyomtatás High Heel Rain Boots Leopárd Merrell Női Silversun Csipke Vízálló téli cipő Páfrány , Bella Vita női Kortezes sarkú szandál Stone Kid Suede Sam Edelman női Yaro sarkú szandál Narancssárga Multi Cactus Garden Print Jambu női Cybill Wedge szandál Fekete , Marc Fisher női Harlea Wedge szandál Fekete
As processors became more powerful, the next step was usually compression. Here, more intelligent and powerful algorithms were put to use that were able to compress all sorts of data without any loss of information, especially when datasets were optimized by packing together clusters of the same type. Text files compress very differently, for example, than image files, and compressing each type separately would yield much better results.
But decompression takes time and space, so programmers are always trying to carefully evaluate the trade-offs. When decompressing data becomes more expensive and slower than loading it, it loses its purpose—unless obfuscation is your goal.
We reached that point around the time that large hard drives became commonplace and storage space became seemingly of no real consequence. Not surprisingly, it went hand in hand with the emergence of object-oriented programming. Almost all game developers moved from C to C++ at the time, as the language of choice. As a consequence of encapsulation, and private object implementations, the mantra "know your data" became frowned upon. You were not supposed to know how a method implements its workings or what its internal data looks like. Just assume it works!
When it came to loading and storing data for these objects, programmers would oftentimes simply serialize the object and dump it straight onto the hard drive. Simple, fast, not much can go wrong.
As games grew in size, the widespread use of game engines like Unity, Gamebryo or Unreal and others further compounded to the problem. No longer interested in internal workings, developers would use the built-in functionality without giving data storage much thought.
As a result, load times for games increased again, dramatically. Some developers tried to counter with compression, but as I mentioned before, better compression comes at a cost and as you sit there and stare at the loading bar on your screen, you're not actually experiencing disk transfer times, but rather decompression taking the limelight.
To me, it is simply unacceptable that I have to wait for 2 or more minutes to get back into the game after my character dies, as is the case in many games these days.
So how can we solve this problem and rein in load times? A multi-pronged approach is definitely necessary.
The first and most important thing we need is goodwill. As developers, we have to WANT to bring load times down. Only then will we spend the necessary time to analyze the issue and try to find solutions for it. Since every game is unique, optimizing load times is a custom process, just like optimizing a rendering pipeline is. But first, we have to see it as a problem that requires fixing before we can do something about it.
In the case of a save game re-load, as described above, a number of methods instantly come to mind, and instantly the vintage mantra "know your data" becomes relevant again. If you don't know what you're dealing with, you simply cannot optimize it.
Assume, if you wish, that you load a game, stand there, and one second later, without ever moving, your character dies from the effects of a poison. What happened? Nothing!
At least nothing that should warrant a 2-minute data load in an age where disk data throughput is in the hundreds of megabytes per second. We did not destroy any geometry. Did nothing that affected any of the textures or light maps. No items were touched. We did not move around either, requiring no additional geometry or texture pre-caching. No new opponents were spawned. Everything that happened was limited to a small subset of data, such as opponents moving around, perhaps, the character's stats themselves, perhaps some raindrops falling—stuff like that.
With a bit of effort on the developer's side, all of that could be reloaded or even reset within a fraction of a second. With the right technology and methodologies in place. So, why not develop a core system that flags data as dirty when it has been modified? Why not develop loaders that are intelligent enough to reload only the data that need to be reloaded?
In practice, it would require grouping various types of data together—hence the return of the "know your data" mantra. If you keep all positional information in a storage pool together, you can elect to load only these positional data. If you group geometry together, you can selectively load only geometry, if it has been affected. If the player has not even moved and there is no need to reload gigabytes worth of textures, why do it? I suppose you get the idea.
The key is to identify what has changed and to find ways that allow you to access and reload only those portions of data that are necessary. Your reload times will very quickly go through the roof in many instances.
The same is true for the basic game load when you start it up for the first time. If data is properly organized, it can be treated in a way that is specific to the dataset. Instead of compressing certain types of data, they could be encoded instead, since decoding is typically faster by a significant factor. Other types of data may lend themselves to compression using one type of algorithm, whereas others would benefit from a different type, which may decompress much faster. The key is to take the time to explore, analyze and evaluate your data and your needs and then build an optimized strategy around it.
Is this a trivial task? No, by no means. It requires very careful analysis and structuring of data layouts, as well as the implementation of logic that flags, identifies, isolates and manages data loads, but it is important work. Loaders may become quite a bit more complex but it is a fair, one-time price to pay for an improved user experience. Even a very basic system using different layers of data and loading them selectively will result in shorter load times right off the bat.
To put it in perspective for you, if you can cut down the loading time of your game by one minute for a million game sessions, you have effectively freed up almost two years worth of time. Your players will thank you for it!
Oct 3
This is a reasonably complex sentence, I think, that can occur anywhere in any role-playing game. Without a proper dynamic text system, it is hard to fully take control of it, and it would require a lot of a special coding to catch all possible cases, however. For us, its challenges are solved in a breeze.
Let's look at the structure of this sentence first and break it down, like this.
A lot going on here, wouldn't you say? Using my Grammar engine, however, this entire structure is easily represented in this way.
Once again you will notice the elegance of the implementation because Grammar always makes sure that the source sentence remains readable and understandable. This will be especially important once you try to localize your text. In those instances, cryptic implementations will instantly cause trouble and create translation errors that are time-consuming to catch and handle.
To further illustrate the power of the Grammar module, here are more possible, dynamically created output sentences stemming from that one template. As you will see, none of them feels like a cheap cop-out that attempts to circumvent grammar issues the way all-too many games do.
Assuming that all nine ring wraiths descend upon the poor hobbit in our previous example, we would get this result.
Notice, among other things, how the [his-her] and [he-she] tags are correctly expanded to their and them in this case because there are now multiple monsters and swords in play. And all without a single line of extra coding!
Alternatively, we could generate this output…
or this one, referring to his sword by name, instead of the generic description.
Let me stress it again, that all these sentences have been created from the same source template that you see above. The Grammar logic is doing all the hard work for you to match articles, pronouns, names and grammar cases in order to form a grammatically correct sentence. It's almost like a little bit of magic. 🙂
To allow for this kind of flexibility, the Grammar module needs a certain vocabulary; tags that it can interpret and adjust, respectively. This vocabulary contains the most commonly used terms, such as pronouns, verb forms, article forms and others, and, if need be, it can be easily expanded to accommodate even the most complex situations. The system I've designed gives me the freedom to shuffle things around efficiently, just the way I need it.
This is, perhaps, best evident when you look at other languages, most of which are considerably more complex than English. Here, for example, is what the above example could look like when it is being translated into German—a language with highly complex grammar rules.
Despite the language's own complexity, you can see that, outwardly, the tagging does not appear much different from the English version—except for the fact that, like the sentence, they are in German, too. The complexity is hidden under the hood, as these tags are being interpreted. The fact that these tags are actually German, takes any guesswork or awkwardness out of translating the text. The result will be translations with fewer errors and misinterpretations.
The source sentence above, when interpreted by Grammar, would result in an output somewhere down these lines…
Nice, isn't it? Because of its complexity, the German implementation contains a much larger vocabulary to interpret, but for the writer, this is irrelevant, because the sentences are tagged in their native, natural language.
And the same approach works for Spanish or any other language. The module provides the most commonly used native Spanish tags that will allow writers and translators to easily create sentences that take the respective grammar into consideration.
If you are interested in the Grammar module, it is now available in the Unity Asset Store. It currently supports English, German and Spanish languages. It is easily expandable, both with additional tags and to support any other language. In fact, I could easily write language modules for Elvish or Klingon, if there were any demand for such a thing.
And since it's all fully abstracted and encapsulated, it's usage could not be simpler. And all it takes to switch to a different language is a single API call. The rest would fall into place automatically, in real time, without processing or additional data overhead.
And just like that, we solved a problem—and elegantly so, I would say—that has limited game developers for three decades. Don't be the one to use banal sentence structures in your narratives. Grab a copy of the Grammar script package and leave your sordid, nondescript language past behind!
Now available as a script package in the Unity Asset Store
Sep 26
Today I want to show you how I approached the problem to create my Grammar script package for Unity3D. To understand the approach and its solution, it is best to a look at a sentence in a more abstract form. When we have sentence like this
You can break it down into its parts.
We can now easily create thousands of sentences, using this exact structure by simply substituting its elements. We could, for example, say
Different sentence—same sentence structure. The definite article is dropped here because Frodo is a proper name, the verb is now to grab, and the object has become a dagger. Not a whole lot different than the previous sentence, but the fact that the proper name doesn't need an article is worth remembering.
Another example could look like this…
Same structure, but a few more rules kicked into action. Because the orcs is a plural form, the verb form changes as well. The s from grabs has been dropped to reflect the plural. In addition, because swords is also a plural form, the correct indefinite article is now the word some. (It could be omitted altogether just as well, depending on your preference.)
The easiest way to accommodate these adjustments in dynamic text is to create an engine that can generate the necessary sentence elements by itself. In order to do that, it needs some information about the objects in question.
For that purpose, I am setting up a data structure to hold the most basic grammatically-relevant attributes. This GrammarAttr data structure contains info, like the name of the object, as well as its gender, a count and plural flag, a flag to indicate whether it's a proper name, and a few others.
The name in the structure is using a special format. Because it is not enough to simply drop in the name itself, I needed a format that allows me to generate correct singular and plural names of an object. Since no rules exist for this in any language, it needs to be hard-coded. To make it work I am using a format that consists of the word base, then the extension for the singular form and then the extension for the plural form, all separated by a period. Here are some examples.
To generate the singular form for woman, I would therefore concatenate the word base wom with the singular ending an. Whereas the plural would consist of the word base and the ending en to create women.
Identically, when creating the singular form for orc, I would take the word base orc and add the singular extension to it, which is empty, so the word remains orc. To generate the plural, we concatenate orc and s.
It is a very simple and very effective process, really, that I've been using unchanged for over 20 years. To make thing more convenient, my implementation also lets you drop the periods, if you have a proper name, for example, that does not have a plural form, so Frodo could be simply entered in the system as Frodo, without any periods.
With all the attributed found in the GrammarAttr data structure, we can now go about designing actual tags that we can use to mark up the source text. I decided to enclose all tags with square brackets. This keeps things readable and it allows me to parse tags in the string very easily with a simple Regular Expression.
Since I want to make sure these tags can be easily understood and will help the translation of text into other languages, I decided to use natural language for these tags. In order to dynamically generate sentences like the ones above, my source string would, therefore, look like this
Immediately, I am sure, you grasp the elegance of this because I am certain that just by looking at it, you will instantly understand how it works. But, you may also notice some of the inherent ambiguity.
The sentence contains the tags [The-name] and [a-name]. But how does the program know, which is which? This is where the GrammarAttr data comes in. When parsing the text to generate the final output string, I will pass a list of the referenced objects into the function as a parameter. This means that I will have a GrammarAttr object for the orc, and one for the sword.
Now it becomes a simple matter of reference. In order to tell the software, which object is which, we simply extend the tag and write this instead.
As you can see, some of the tags have a prefix now—once again, separated by a period—creating a grammar context. At the beginning of the sentence, I set the context to the first object (the orc) so the software will generate the output The orc. Note how the capitalized T in The-name indicates that I want the output text to start with a capital letter as well.
The Grammar module will first read the reference, grab the attributes for the first object and extract the name. Then it will slap a definite article in front of it—provided it is not a proper name, which does not require an article—and generates the output.
Naturally, if we were to set that data attributes to indicate that we are dealing with multiple orcs through the use of the plural flag or the actual count variable, the program would generate the respective plural form of the name.
As we move on, we hit the word/tag combination grab[s]. Since we have previously set a grammatical context—we are referring to the first object in the list of GrammarAttr parameters—the program can now check to see if there is one orc or many. It will then add the letter s to the verb grab, depending on the status of that flag. This will therefore generate either the sentence fragments The orc grabs or The orcs grab.
The next tag has a prefix once again, creating a new context. We are now referring to the second GrammarAttr object in the parameter list, and we want it to print the name of that object, complete with an indefinite article.
Easy enough. Grab the attributes, generate the name, generate the correct article, depending on the name and the other attribute flags, and voilà, we have a full sentence that says
As I pointed out before, by simply changing the attributes in the GrammarAttr data structure, we can now create sentences addressing thousands and thousands of different objects, if we wish, using the same source sentence, all showing up with the correct grammatical rules applied.
Granted, this is a very simple sentence and a very small example, but it illustrates the approach I am taking to generate grammar-aware text strings. If you join me next time, I will show you how other tags allow us to create much more complex sentences, and in a future post, I will also explain, how all this fits into making localization easy and safe. I'll see you soon…
Now available as a script package in the Unity Asset Store
Sep 20
Even in today's world of high-end RPGs, we still frequently see text output such as this:
I may be over-simplifying this right now for illustrative purposes, but these impersonal, one-fits-all text snippets are the result of over thirty years of trying to avoid one basic, underlying problem—grammar in text generation.
See, in order to keep things a bit more interesting, the designers could just as well have picked a different sentence and made it look like this
or at the very least, in the fashion of old text adventure games, add an article to the respective words.
Naturally, the requirement for longer text changes with each game. Some clearly keep text short as not to get in the way of gameplay, but games that rely heavily on text are better served with more verbose string generation. It is much more in line with the narrative storytelling that classic role-playing games were striving for, and it would create a whole lot more depth, wouldn't it? It would, no doubt, and it was one of the key ingredients that made the Realms of Arkania games such a rich and incredibly detailed experience. So why aren't more developers doing it? Are they truly so afraid that people don't like to read? Hardly. If any audience in the computer game world is willing to read voraciously, it is role-players and adventurers.
No, the reason is purely technical in nature. To illustrate my point, let's assume for a moment that Samwise is not picking up a sword but some coins instead. In this instance, the text output would have to look like this…
As you can see, the sentence has changed. Slight as the change might be, it is significant. Because coins are plural, the sentence needs to reflect that, resulting in different pronouns (them as opposed to it).
Things get even trickier when we change the sentence to something more complex like this
There is, suddenly, a whole lot more grammar we have to deal with. "An orc," and "a sword" are nouns that require indefinite articles, and as you can see there are different versions of it—"a" and "an," depending on the word it is referring to. "It" is a pronoun referring to the sword that can change also if we are referring to a noun in its plural form. Then there is "Sam's," a genitive case of a name, which can also have different forms, not to mention that we need to distinguish whether we are referencing a general object like "the orc's eye" that requires an article, or that of a proper named object, like "Sam's eye," which doesn't.
Here's an example, how the same sentence changes if we just change some of the nouns it refers to.
Barely looking like the same sentence, in a way, but if you check closer, you will see that the sentence structure still remained the same.
I am sure you are getting the general idea of what I am trying to illustrate. Any time you make an attempt to dynamically create sentences that may contain any of a number of variable noun references, things can very quickly get rather complicated. You can't just arbitrarily drop object names in the text and hope it all turns out right.
Funny enough, though, in English this may actually work quite frequently, especially when you stick with definite articles, but that's only because English is a fairly simple and straight-forward language—grammatically speaking. When you get into Germanic, Roman, Slavic or Asian languages, all bets are off, because these languages have reams of grammar rules that do not even exist in English. Some feature arrays of pronouns that depend on the referring noun as well as the referred-to noun. Without a proper plan of attack, managing this kind of variety is a futile effort and will inevitably lead to a lot of code duplication and extra programming—or, God forbid, tons of specially written/translated sentences to capture different scenarios.
That is the very reason why many developers and designers will revert to the banal, one-fits-all text version I described in my opening. They are easy and safe cop-outs. Not much can go wrong when you essentially talk in bullet points. It's just not very inspiring and certainly doesn't help to transport you to another world. Nothing screams Middle-Earth, Tamriel or Azeroth quite like…
…and neither do dialogues or setups in which everything is static and every step has been predefined without any consideration for character weaknesses or traits to add personality or twists.
While developing the Realms of Arkania games, many years ago, the narrative depth was crucial to us. We wanted to make sure that we could easily adapt situations, plots, subplots and sentences to fit all sorts of situations. Those of you who played the games will certainly remember this. With a personalized party of up to seven characters, a world dense with monsters and encounters, and gameplay that featured many hundreds of items, a more strategic approach was necessary, especially because we had planned, from the beginning, to translate the game in different languages.
At the time, I developed a system that allowed us to make our text output grammar-aware but in all fairness, it was a rather clumsy, academic approach that was way too convoluted to be useful to anyone without the proper technical background. But it was a first step.
As I began designing Deathfire a few years ago, an RPG I planned on making, I approached the subject matter anew because the focus of the game was on the Psycho Engine, a piece of software that would allow me to dynamically adjust gameplay and the behavior of entities in the game on the fly. Therefore, I needed a maximum of versatility and flexibility, while also making sure the game could easily be translated into as many languages as possible. With a fresh mindset and a bit of development experience in Inform under my belt, I designed a new system.
Inform, as you may know, is a programming language specifically designed for interactive fiction/text adventures, and, as you would expect, these types of games have the exact same challenges to contend with. The key difference, however, between Inform and my grammar-aware text generation is that the Inform engine actually knows what you are referring to, because everything in the game world is defined in terms of addressable objects, whereas a generic dynamic text generation system is not aware of the actual context and needs to derive the necessary information from somewhere else.
I had never had the opportunity to actually implement the system—it was a spec design on paper, more or less—but in recent weeks, I've had some spare time and decided to write a C# implementation for Unity3D. With all of the above in mind, I sat down and created a code module that enables me to easily create dynamic sentences that are grammar-aware and that allow me to use natural language to define a grammatical context. In my next blog post, I will tell you the details, how it all looks like. Join me then…
Now available as a script package in the Unity Asset Store
Sep 18
Alongside a new PS4 Slim model, last week Sony also announced a new PS4 Pro model to be released in November for $399. One of the key features of this mid-cycle hardware upgrade is that this new console will offer 4K ultra high definition resolution, along with the expanded colorspace of the ultra high definition format that allows for native HDR. Alas, according to Sony's announcement, the PS4 Pro will not play 4K UHD discs.
Now, a lot has been made of this lack of 4K UHD disc support over these past 24 hours and many fans are disappointed. Expectedly so, but… there is more to this story than you might suspect.
Before you dismiss the PS4 Pro out of hand, let me fill you in on a few things that you may not be aware of, because they have been hardly discussed in public so far.
The 4K UHD disc format is actually a standard Blu-Ray format. When the Blu-Ray specs were devised, it allowed for a large number of layers on a disc to accommodate the voracious, ever-growing storage needs of digital media. The format was designed with the future in mind. While, in practice, so far no real application has been out there, to the best of my knowledge, that used more than two or three layers, there are plenty of provisions in place to create discs with four, five, six or even more layers on a single disc. And it is this feature that is being used on 4K UHD discs. At heart, they are still only Blu-Ray discs, just with more storage, differently encoded video files on them and a slightly different menuing system that accommodates new features.
As a result, any Blu-Ray drive that properly follows the Blu-Ray specifications should theoretically be able to read these discs. (Note that I said read, not play.) Now, in the real world, because these additional layers have not been used before, there are, of course, low-cost drives out in the market that do not support the feature—a result of cost cutting measures. However, every modern Blu-Ray drive does well to integrate the capability to read additional layers. I am sure, most manufacturers have complied with those specs for some time now and I have absolutely no doubt that the drives found in the upcoming PS4 Pro will be able to read these high density Blu-Ray discs with absolutely no problem.
So, to be clear, from a technical standpoint, there is no difference between a regular Blu-Ray disc and a 4K UHD disc. In fact, they are authored the same way and they are replicated the same way. In fact, they are replicated on the exact same machines. It was one of the appeals that the 4K UHD format had for studios that existing production lines could be used to manufacture and replicate these next generation discs, making them very cheap to produce right out of the gates.
So, why doesn't the PS4 Pro support 4K UHD discs? The answer to that may lie in Sony's Consumer Electronics division. At this time, Sony is preparing the launch of a series of settop 4K UHD players. Naturally, the company wants these players to succeed. They want to sell them in quantities that makes the company proud. If they would add 4K UHD capabilities to the PS4 Pro, many people would simply forgo a settop player and use the PS4 Pro as their player of choice, the way they did when the PS3 first arrived, complete with Blu-Ray capabilities. Only this time they don't have a format war to win (remember, Blu-Ray competed heavily against HD-DVD at the time and the PS3 was essentially the format's secret weapon that decided the war), so there is no need for them to cannibalize their own divisions. When it comes right down to it, the lack of 4K UHD disc support is simply a business decision that actually makes sense for the company. Why? Because this is not the end of the story.
At this time, I have to admit that the PS3 is still my preferred Blu-Ray player of choice. The reason is simple. Unlike settop players, Sony made sure the PS3 always kept up with improvements and innovations in the Blu-Ray format. When DTS-HD Master Audio arrived, all they did was give users a firmware update and voilà, you could suddenly play DTS-HD Master Audio tracks. When Blu-Ray 3D came around, it took only a firmware upgrade for viewers to enjoy their 3D content. The list of capabilities they added via simple firmware updates was truly impressive throughout the years.
There is absolutely no doubt in my mind that we will see the same kind of commitment to unlocking features-as-you-go when it comes to the PS4 Pro and 4K UHD discs. When the company has safely shipped settop players to stores and has seen them sell through, you will find a firmware update on your PS4 that will suddenly enable 4K UHD disc playback.
Is it possible? It is not only possible. It is extremely likely. There is no technical limitation. The PS4 Pro is capable of decoding and displaying full 4K UHD video streams with HDR, and the console is capable of reading Blu-Ray discs. That is all the hardware capability you need to play 4K UHD discs. Everything else is merely software to facilitate the data transport from the disc to the display logic and to handle things such as disc menus etc, all of which follow established Blu-Ray specifications, only at a higher resolution and in an extended colorspace.
So, once again, before you dismiss the PS4 Pro as a failure and as a no-purchase because it doesn't support 4K UHD discs, think again. This limitation will be only temporary and its solution will be a mere firmware update away.
With that in mind, perhaps it is time for you to stop over on Amazon's website and pre-order your PS4 Pro?
May 16
Visibility. The biggest problem mobile games face in the current climate. Every game. Every publisher. The difference is that publishers like Supercell can buy their audience with excessive advertising, premier placement and Arnold Schwarzenegger. Most mobile developers do not have that luxury. Most developers have no exposure whatsoever.
If you have only one, two or three mobile games in your portfolio, you don't even have the ability to leverage your own games against each other, because you simply do not have the necessary visibility to drive traffic, and as a result, you're not really making any money. And don't be fooled. The quality of a game is ultimately irrelevant. You can have the best game in the world, but if no one knows about it, it won't make you any money. There is no such thing as "a good game will always find an audience." It is a myth.
As I mentioned at other times, I am working with Gigataur these days, a Canadian mobile developer/publisher. In that capacity, I am looking for such undiscovered games so that we can republish them through our Playmium line and generate actual money for their developers.
As I did last month, I have compiled a list here, of some noteworthy games I came across during my voyages through the world of Google Play and the App Store.
If you are looking for a cool strategy game that has depth and an identity of its own, look no further than Bonus XP's "The Incorruptibles." The game is impressive and chock full of features that deepen the experience, reminding one of the golden age of strategy games. It should not come as a surprise, because you can easily tell that some of the brightest minds of the strategy game genre are behind this game, with decades of experience, building games such as "Sid Meier's Civilization" and the "Age of Empires" series.2. Vikings: War of Clans — Plarium
While we're on the subject of strategy games, Plarium is always doing stuff on the highest level of quality when it comes to the genre on mobile platforms. Don't let the beautiful presentation of "Vikings" fool you, however. This game is a whole lot more than mere eye-candy. It is also a full-blown strategy game with depth on an absolutely epic scale. Be prepared to set a good amount of hours aside when you download this game, because it will hold you in its grip.3. Crystal Blitz — Nika Entertainment
You can find Match-3 games like sand on the beach but the ones that are the most fun are the ones that introduce new ideas in the gameplay and shake up the stale formula a little. In this case, Ukrainian Developer Nika Entertainment has done just that, adding an actual game world to "Crystal Blitz," that feels alive and gives the game a very distinctive feel. One that reminds me of a role-playing game, almost, without actually being one. The game is exceedingly well done and instantly grabbed my attention.4. Runemals — Jandusoft
When you see a tagline line that says "Collect them all!", you are instantly reminded of Pokémon but as it turns out, "Runemals" has more in common with Gung-Ho's "Puzzle & Dragons" than the Nintendo flagship. But then again, it has real turn-based RPG elements that make it unique and highly attractive. With its colorful graphics and the screen layout, it almost feels like a classic "Final Fantasy" and Match-3 mash up. Be that as it may, however, in the end, it is simply a lot of fun, and that is what really counts.5. Heroes and Castles — Foursaken Media
This fully fleshed-out 3D fantasy action game comes to you courtesy of Foursaken Media, and it does not mess around. With massive battle scenes, "Heroes and Castles" is a tower defense/strategy/action game that will draw you in, whether you decide to play it in single-player or in the two-player mode. Plenty of advancements and hero types keep you busy as you build and control huge armies on the battlefields. The clash of titans has never been more fun.6. Monster Planet-Dragon Legends — PapaBox
The graphic style was what initially drew me to this game but I soon realized that there's more to it than just beautiful images. All that splendor comes at a price, though, and with 230MB, the game has a pretty big footprint and takes a while to download, but it's well worth it. Featuring almost 400 different monsters for you to battle and collect, this game makes Pokémon look like continental breakfast, while "Monster Planet" dishes out a full dinner menu. Give it a try and lose yourself in its cool, scifi-fantasy world.7. Schools of Magic — Codigames
A role-playing game with a colorful, cartoony look, "Schools of Magic" focuses almost entirely on the magic users you typically find in role-playing games. Never mind the sword-fodder like goblins and orcs, in this game, you will encounter wizards, necromancers, druids, priests, mages and the like, all ready to battle you. And if the storyline and campaigns the game provides aren't enough for you any more, try the player-vs-player battle system that allows for virtually endless challenges. The game does have a few glitches, but once you get past that, you will find a truly rewarding experience.8. Soul Hunters — Lilith Mobile
Lilith Mobile is a really interesting developer, and "Soul Hunters" is a great example, why. It is a classic Nintendo-style role-playing game but it has replaced the Japanese-style graphics with something that looks more like a contemporary casual game. The result is a beautiful mesh of old and new, giving "Soul Hunters" a very fast-paced and modern feel while retaining the charm of classic console RPGs. And to make things even cooler, the developer has just teamed up with Ubisoft, including Assassin Creed's Ezio Auditore as a character in the game. Ooooh… goodie.9. War Dragons — Pocket Gems
If you love dragons, you will love this game. This is a spectacularly-looking real-time strategy game in which you control not only your citizens as you build a kingdom, but also the dragons that serve as attack forces. Fully realized in 3D, the game is not only fun to watch, but also quite a ride to play. With over 100 different kinds of dragons, you won't run out of variety anytime soon, and the multiplayer mode allows you to challenge players in the real world and lay waste to their domains. It is every bit as much fun as it sounds, and the spell effects alone make this game well worth checking out.10. Sparkle 3 Genesis — Forever Entertainment
This is a fascinating game that falls somewhere between experimental and traditional arcade shooter, and the result is… well, hypnotic is probably the best way to put it. Beautiful, otherworldly graphics complement the great gameplay that will want you to just keep going and going and going. As you drift through this ocean of color and eat the particles, your own organism will grow and, depending on what you eat, it will grow into different lifeforms. It is like the opening level of "Spore", in a way, but much, much cooler and more organic, almost as if you're observing life through a microscope.
The well of overlooked games seems endless, and though there are way too many clones of successful games, I've come to realize that many of them tweak the established formulae and turn their own version into something fun and entertaining nonetheless.
But the problem remains—visibility. It is a challenge that we at Gigataur are addressing with a two-pronged approach. The first is that we convert even a limited player base into measurable revenue, something that has so far been altogether impossible. In addition, by establishing Playmium as a brand, we are able to cross-promote titles within the Playmium line of games, drive traffic to them and convert players into actual money. This is something that independent developers and publishers with small catalogs simply cannot achieve.
So, what are you playing right now? Any games I should be checking out?
If you're a developer or publisher and you have a cool mobile game that you'd like me to consider for inclusion in our Playmium line of titles, feel free to send me an email at and I'll be in touch with more details.
Apr 18
The mobile games space is tricky. Long gone are the days when mobile developers were able to work directly with carriers, get their games placed straight on phone decks and charge upwards of $5 for a game. Things like free-to-play, micro-transactions or ad-support did not exist in those days. Every game was a Premium title and once you managed to land on a carrier's deck, money was guaranteed. Success was predictable.
As I said, a lot has changed. Today, there's virtually no money to be made in the mobile market. Less than 1% of all games generate 99% of all revenue in the industry. For every "Angry Birds" or "Clash of Clans" there are—quite literally—a million games that do not even generate $5 per month. It has been disturbing for me to watch the industry implode in a matter of weeks once the iPhone launched in the summer of 2007 and Apple opened the floodgates for hobbyists to publish their own games. Nothing has been the same since and the self-destructive cycle has continued for years, eroding, what little market there had been left. Today, every mobile game is struggling to find an audience. What makes matters worse is that even with an audience, every mobile game is struggling to make money because high download numbers no longer guarantee actual revenues.
And yet, the stream of new games seems endless. Did you know, for example, that currently 1,000 new mobile games appear in the Google Play store EVERY WEEK? With numbers such as these, and the industry essentially being forced to make games available for free, it is hardly surprising that practically no one is making money in mobile games these days. Not with micro-transactions, not with ad-support and certainly not with Premium titles.
This disturbing trend is the reason why I joined Gigataur recently, a Canadian publisher that has developed an exciting new way to monetize mobile games and put money in developers' hands, where it belongs. As part of my assignment, I have spent the past months looking through hundreds of mobile games—mostly casual titles—evaluating them, and I thought, I'd make a short list of some of the most notable, overlooked gems I've discovered on that journey. Please join me and, perhaps, try out one or two of the games for yourself. Speaking of gems, let's kick the list off with…
While being a general "Puzzle & Dragons" clone on the surface, I found the game has a lot more to offer. Not only does it have an incredibly witty charm and is larded with hilarious comments and names, but it also offers solid gameplay that never gets stale. In fact, the game is so huge, I have yet to see the borders of the game's world map. Seriously, this game is humongous… and gorgeous, and its user interface makes it possible to start playing without much of a learning curve. You jump in, start matching gems and kicking some monster butt.2. Throne of Dragons — Rocket Games
Slot games have come a long way and the titles that Rocket Games is dishing out are not only some of the most beautiful ones, but also some of the most balanced ones, making them nothing but fun to play and explore. As a fan of fantasy settings, "Throne of Dragons" instantly appealed to me and kept me coming back with its awesome graphics and its fun slot play. Tall Wilds, oversized slot cards and fun mini-games keep the play interesting while unlocking new slot machines in the process. In the same vein, try their "Riches of Zeus" also, a slot game with tons of features, mini-games and a seemingly endless supply of unlockable machines. Slot games simply don't get much better than this.3. 4 Elements — Playrix Games
This is a fascinating game that amalgamates many genres. It combines features of hidden object games, match-3 games, puzzle and trading card features, all in one game. The graphics in this game are top notch, making it look like a million bucks, and the design keeps you coming back to explore and uncover more of the rich features. Sadly, the free demo, which ends after a few short levels, only gives you a hint of the wealth of features and the breadth of diversity that "4 Elements" has under the hood.4. Quest Run — Phoenix Online Studios
While not strictly a casual game, this RPG-inspired game of tactics is so easily accessible that it would certainly qualify as casual in most aspects where it counts. The game has a few quirks and its difficulty level can be quite infuriating, but neither have really caused me to put the game down. In fact, every level that you defeat will feel like a true achievement, making you thirsty for the next one, always giving it just "one more try."5. Earthcore: Shattered Elements — Tequila Games
"Earthcore" is a great example that showcases how collectible card games do not have to be hardcore and do not have to overwhelm the user with options and features. Solid fun and easy to learn, the ultimate challenge of the game is mastering tactics in order to defeat your opponent in player-vs-player battle. The game has great graphics and its overall production value make it a real highlight of the genre—or at least I found myself going back playing it again and again.6. Creature Quest — VC Mobile Entertainment
From the creator of the classic "Might & Magic" RPG games comes a top tier fantasy collectible card game that will hold you spellbound. I am using the term "collectible card game" loosely here, because, at its core, this is an RPG with collectible aspects to it, centering around PvP battles. Clearly, the game was developed with the highest production values in mind and it shows in every nook and cranny. From the gorgeous art to the lovely animation details and nifty gameplay features, this game is ripe with everything genre fans love. To me, it has been one of the most fascinating discoveries of my recent mobile explorations.7. Puzzle Trooper — Gumi Inc.
Gumi is a heavyweight in the mobile space, but even in their deck, you can find games that never really became break-out hits, the way some of their blockbusters are. To me, "Puzzle Trooper" was such a game. I love the attitude of this title. It is a "Puzzle & Dragons" clone but what made it stand out for me was the fact that it looks like "Metal Slug." It has the same awesome art style, the same quirky animations and the same cool sense of humor. While it may not be re-inventing the wheel when it comes to gameplay, it manages to create an experience that is all fun. And then some.8. Pirates Storm: Ship Battles — Gameone
If you love classic Arcade shooters, this is your baby. "Pirates Storm" is a vertical scroller with sailing ships and a modern, clean, casual look. But don't let it fool you. The action is frenetic, to the point that frequently, the game appears to run out of screen real estate, because there are missiles flying at you from all imaginable directions. The game features everything you could ask for, cool graphics, homing rockets, cool explosions, pick-ups galore, huge explosions, gems, and whatnot. What's there not to like? But boy, it is hard…9. Zeus Defense — Alawar Entertainment
This tower defense game gets my thumbs-up, because I love the look of it. Using a mythological Greek setting, it conjures up memories of Disney's "Hercules" with its colorful art style and atmosphere. It features tons of mythological monsters that try to overrun your settlements and it gets incrementally harder, dishing out some serious boss battles as well, so don't let the cute look fool you. This is a full-bodied game with plenty of specials and features as you go along.10. Nords — Plarium
Ever heard of "Nords?" Probably not, but you should have. This is a cool strategy game with the look and feel of "How to Train a Dragon." Colorful, yet ferocious, the game is actually a massively-multiplayer game in which you have to carve out your place. With cool battles, awesome world building, and beautiful characters, the game offers top-tier production values throughout. And it has depth, I tell you. Factions to choose from, a crafting system, different units and champions to chose from, make "Nords" a real heavyweight that sadly flew under almost everyone's radar.
This is just a relatively small excerpt of some of the game highlights I stumbled across recently, but I felt that I should share some of the great games I stumble across on my journey. But now it's your turn. What are some of your favorite mobile games that you feel have been overlooked? Let me know so I can take a look at them as well, and perhaps include them in a future list.
Also, if you are a developer with a cool mobile game, feel free to contact me at ! As I mentioned in the opening, we have exciting opportunities at Gigataur.com that open up additional revenue streams for developers without interfering with their current business. Send me an email and I'll be happy to tell you more about it.
My Books
Zen of eBook Formatting


text:
It's too obvious. For a man to fuck a womans face/mouth with his cock. Typically when the woman is on her back.
Dude, I was fucking her missionary, pulled out, and Face-fucked her!
by Jamie Seven September 09, 2005
To fuck ones face...uncontrollably....usually done during sex...or for shits and giggles,to a best friend in front of a few close buddies
by Mr earl mason October 04, 2010
when you get screwed over by someone facebook
my gf didn't know i was at that party until she saw Samantha's comments on my wall. I totally got face fucked.
by stefymarty July 20, 2009
A person has been Facefucked when their significant other falls in love with someone else on Facebook and leaves them.
Your wife hooks up with her first boyfriend after he sends a friend request on Facebook. They fall in love and she leaves you. You just got Facefucked.
by np-pm October 12, 2013
to get owned by someone who has posted something about u on facebook or could be someone hacking into ur facebook acount somehow and posting things 4 u, therefore looking like a prick when u next go on it, it can be so bad that people just cancel their account all together
person1: my m8 got facefucked by someone hacking into his account, he had 2 cancel his account it got that bad
person2: is he gonna create a new account
person1: doubt it, he's traumatised enough
person2: is he gonna create a new account
person1: doubt it, he's traumatised enough
by DJ SPYKERZ(SCOUSED OUT) July 06, 2009
The ilegal entering of your Facebook account by a friend in order to change details and information about yourself!
Somebody only Facefucked me yesterday!...they logged in as me and changed my sex from male to female!
by Nick Gedge January 14, 2009
To get screwed over by something posted on Face book. This could be something you or someone else posted that caused you drama or worse......
My girl saw a picture of me last night out with that pig. Scottie posted a picture it on his face book. My girl left me. I got Facefucked.
by Nutsax April 14, 2009
Trending RN - September 22, 2018
- 1. Clitty-litter
- 3. road frontage
- 4. black ice
- 5. an bhfuil cead agam dul go dtí an leithreas
- 6. september 21
- 7. doorknob
- 8. greesy
- 9. mazo
- 10. juuler
- 11. whatshisnuts
- 12. Litter
- 13. Blue Lips
- 14. Stoma Sex
- 15. Agekin
- 16. Trach shake
- 17. Yeti Pubes
- 18. helf
- 19. tikol
- 20. dislike
- 21. Pop
- 22. sorority squat
- 23. blasting ropes
- 24. baker's dozen
- 25. Pound cake
- 26. Stashing
- 27. FriYAY
- 28. Death roll
- 29. that whole Yale thing
- 30. Thiccness

subset: commoncrawl


text:
- Your selections:
Database Results for Your Selections
Results 1 - 3 of 3
Bible Odyssey
Bible Odyssey brings academic study of the Bible to a non-technical audience. The contents of the site are based on three categories: people, places, and passages.Expand
Subjects are treated in traditional, peer-reviewed articles, or in other multimedia formats such as videos, images, maps, and timelines.
Subjects: History Ancient -400, Religion
Bibliographie de civilisation médiévale
The Bibliographie de civilisation médiévale (BMC) is a comprehensive, current bibliography of monographs worldwide and listings of miscellany volumes (conference proceedings, essay collections or Festschriften).Expand
It is designed to serve as a complement to the International Medieval Bibliography (IMB), which covers primarily periodical and journal articles. In fact, BCM and IMB are fully integrated with each other. BCM coverage goes as far back as the 1958 year of publication.Walk-in users: OK; 3 simultaneous users
Subjects: Art and Architecture, English and American Literature, History Ancient -400, History Early Modern 1450-1800, History Middle Ages 400-1450, History World, Philosophy, Religion
Bibliotheca Teubneriana Latina Online
A reference database for Latin literature from the Roman Republic through the Imperial Period to Late Antiquity. BTL provides online access to Teubner's Latin text editions and includes the complete texts (other than the prefaces or critical apparatus) works spread over eight centuries (c.Expand
300 B.C.E. to c. 800 A.D./C.E.), from Plautus to Martianus Capella.
Subjects: Art and Architecture, Classics, History Ancient -400, History Middle Ages 400-1450


text:
Search terms
Rich bass
Enjoy music and calls in high-quality sound. Oval tube inserts come with 3 ear cap sizes for optimal fit and deep bass. Vacuum metallised housings boast sleek classy finish. Inline mic and control make hands-free phone calls convenient. See all benefits
Ear caps come in a choice of 3 sizes – small, medium and large – for a personalised and perfect fit.
The built-in microphone lets you switch from listening to music to taking phone calls - easily, so you'll always stay connected with what matters most to you.
Compact efficient speakers ensure an exact fit and deliver precise sound with rich bass, ideal for your listening enjoyment.
Textured strain relief provides a secure yet flexible connection between the headphones cable and the plug.


text:
NEW YORK (AP) — Tony Award winners Linda Lavin and Debbie Gravitte teamed up to sing "You've Got Possibilities" and "Mr. Monotony" during the third annual concert to benefit the Pulmonary Fibrosis Foundation.
The event Monday at Birdland Jazz Club also featured Emily Bergl, Robert Creighton, Max von Essen, Klea Blackhurst, Emma Hunton and Edward Watts. Actress Julie Halston served as host.
The event raised almost $70,000, which will benefit the foundation's The Michael Kuchwara Fund for Idiopathic Pulmonary Fibrosis Research, Education and Advocacy. Kuchwara was The Associated Press' longtime theater critic who died in 2010 from complications due to idiopathic pulmonary fibrosis.
Idiopathic pulmonary fibrosis is a lung disease that causes scarring and affects between 132,000-200,000 people in the United States.
Online: http://www.pulmonaryfibrosis.org/broadwaybelts