Blizzard is spending so much effort now bastardizing their game so that new players can zip through the first 70 levels to get to the latest content. They’ve lowered mount requirements, increased xp gains, even started a recruit a friend which gives 3x the experience to get new players up to speed. So all that old content they had for the lower levels is pretty much useless now. It sits in the way of the player getting to the top. What blizzard has a little too much of these days, is pride. They’re too proud of their content to just remove it, so they add in ways that you can experience it or skip it alltogether.
‘Why would you remove content?’ I hear you ask. It’s not about that, it’s about an evolving story. After some time the minor stories in the game should be cleared up, or changed into a more dramatic one. Over months a skirmish between to enemies in a region can escalate, diminish, and bases can be captured or lost. These achievements are decided by the players themselves and take real effect on the evolution of the story for that region. Once the story has gone through it’s cycle it starts over again, they do say history repeats itself.
Each region can have a different cycle, some should even be permanent. As the bigger picture story evolves so should the game. Conquered enemies become allies, new races become available to play. New classes as well. New regions and quests could be opened just by ‘defeating’ a particular group.Players could earn renown just by being named king of a particular village and any player that quests there learns the name.
These evolving story lines will keep the content fresh, and the player will feel more attached to it if they can define the outcome.
Sphere: Related Content
So I had a silly idea to create a game for the Android operating system. It started out innocently enough, but my developer instincts took over and I just had to have the saving/loading of a player done before moving on with the rest of the game. The only problem was I could not figure out why Android would throw a fit whenever I tried to create a file. I looked everywhere online and no one could shed an insight to my NullPointerException. Feel free to skip my rant and read the last paragraph for the solution.
I spent more weeks on this than I care to admit. To my defense I didn’t work that much since my frustrations prevented me being able to deal with it for too long at one time or in back to back days. Indeed it was most frustrating, the log was not detailed enough, the stack trace offered no further assistance and without more details I could not provide a better search query to google to find my answers.
Luckily my determination and my belief that when something isn’t working when it should; it’s not me, it’s them. I have witnessed many of my peers utter disbelief that software and framework vendors can do no wrong. They believe wholeheartedly that they simply are not programming correctly; and that I am arrogant for believing it’s not me, it’s them. My arrogance is not unfounded; I happen to be proved right all too often. I would rather not, however; as I would rather have tools that just work. But I digress, let me get to my point.
I was tryign to create a simple .xml file so that I could serialize an object to the file system for storage. I figured an easy task for saving and storing player data. Much simpler than the SQLlite database alternative. I created a FileService for my game. I have been a .net developer for 2 years now and I have grown accustomed to splitting out my classes as often as possible. Seperating my code into logical objects to keep my code clean and organised.
My fileservice sole purpose was to create files, save players to them, check if files already exist, and return a list of all players. I could not do any of these. It seems the file system java developers perfer is a clusterfuck of directories. That’s just a quirk and not the real issue. The real issue is that my FileService could not create a file. An exception is throw with a nullpointer exception. best I could find out was that the operation failed; well no shit. There was no end to the combinations I tried to create a damn file and none of them worked and none of them gave me anymore detailed information.
I pulled up the API demo, and ran it. Success. Wait, what? It worked fine and my code was just like theirs; until it finally hit me that I had a seperate class doing the File IO operations. So on a hunch I placed my file creation in the main class and presto! I can create FILES! I don’t know why but it works, it does and I’m finally able to press on. Organization be damned, I just want to get this program started before I quit it. Up next, figuring out to check if a file exists. Did I say the directories were a clusterfuck? Where, oh where did my new file go …
Sphere: Related Content
Everyone is going crazy these days setting up new companies promising green technology and new renewable energy solutions. People are giddy with excitement at what the future could hold and how it could not only save us money, but keep our money in our own economy. There is much to be fearful of too. Not every venture is profitable, but that’s exactly what they’re pitching; how their technology is going to change the world.
I’m not saying someone won’t do it; but I am saying take a step back before you drop whatever happens to be left of your retirement fund into some green tech startup stock. Dot Com companies were all the rage, they promised businesses that could market to the entire world with little overhead. For most venture’s this did not work out. Some managed to crawl their way through it and eventually became profitable on the other side of the bust. Amazon and Yahoo are the only high profile names I can think of that survived.
It wasn’t all bad though, we learned valuable lessons in a short span. We are going to go through a similar phase with green tech companies. We’ll learn very quickly what will and won’t work, what green business models work and where. So what can we be sure of in green tech investments? I’d say batteries, look for a company that makes a breakthrough in battery technology and you’ll have found yourself a winner. Infrastructure will be the other winner, if you see a company that can build the electrical grid we’re going to need, they’ll be another good bet.
There will be lots of smaller successful ventures, but they won’t be as profitable. Since most renewable technology is suitable for a unique feature of the environment, most green tech will only be applicable in the regions that support that green tech. Only batteries and electrical infrastructure will be the only things we can count on to be widely adopted.
Sphere: Related Content
OnLive is a gaming service that is making waves that reach farther than the console wars. It is a glimpse of how cloud computing will operate in the future for more than just video games. It will educate the masses the importance of having a more stable, and superbly faster internet infrastructure.
OnLive is a service that allows users to play video games without needing traditional hardware. Today you need to continually buy new Video Cards, RAM, MoBo’s and hard drive’s in order to play games. Since the turnaround on technological advances is about every 6 months, the cost to keep up is too much for all but the hardcore and dedicated, and the rich. OnLive removes the need for the user to keep their own machines. OnLive hosts the video game on their own server and streams the game in high definition to the users TV or monitor. The gamer’s control devices will have their communications sent to the server using a very high speed connection, the server will process the input render the video, compress it and then stream the video back.
OnLive has stated that the service could be ready this year or early 2010, but I’m not getting my hopes up. While this is a great idea and definetely the future, it is also not the present. We simply don’t have the broadband speed/stability necessary (while also being cost effective) to communicate high definition video, with instantaneous response from user input over the net. It’s wonderful to think about having this technology, but serious thinking about it’s implementation and it’s nearly impossible to believe it can be a profitable adventure.
Essentially they would need to have one high end machine for every user to play the latest games. On top of playing the game, the server would have to compress the output instantly. The cost of the hardware on the vendor alone would be huge, plus with continual updates, how could their subscriptions keep pace?
But wait, there’s more. While we can already stream high definition video; that video is buffered so you don’t see any hic ups. In contrast, OnLive can not have any buffering because it will not know what is about to happen next. So any slowdowns in the download speed and it will be immediately noticeable to the gamer; that means OnLive would require an infrastructure stable enough to accommodate. Which we are sadly lacking. We have the means, but those mediums are not currently installed and that would take years to do on any scale.
Rest assured that OnLive will be available, someday. Perhaps not to everyone as It might be like DSL where you need to live close enough. Or you’d need to have some special dedicated fiber optics installed. Either way, OnLive is the power of cloud computing. Taking the hardware costs away from the user while providing a better service. Hopefully my kids can grow up playing OnLive, instead of begging me to buy them a console.
Sphere: Related Content
Open your xps file or generate it to a memory stream.
1 2 3
| private MemoryStream XPSFile;
private const string pack = "pack://temp.xps";
private Uri uri = new Uri(pack); |
var pkg = Package.Open(XPSFile, FileMode.OpenOrCreate, FileAccess.ReadWrite);
PackageStore.AddPackage(uri, pkg);
var doc = new XpsDocument(pkg, CompressionOption.SuperFast, pack);
Now you have an xps document in memory. You can set it to view in the document viewer, or print it off, or what else you can think of.
Sphere: Related Content
In the second installation of Making the next MMO, we’ll discuss solo content and a dynamic group system.
It seems contradictory to have solo content in a massively mulitplayer game; but it’s part of the game everyone takes part in and it is sorely overlooked. In WoW, it is the equivalent of questing alone. While some story lines are engaging, the battles that take place are trivial. You don’t have that sense of accomplishment when you wipe the floor with a supposed badass in mere seconds; but you do after an epic battle in a large group at the highest levels. To have engaging solo content, you need to capture that group feeling.
All end game content, or the real satisfying fights, are built around team dynamics. Or the MMO Triangle of gameplay: Tank, Heal, Damage. All roles, filled by a real person. If you can not find people for those 3 roles, then you can’t engage group play with success. If developers added a Dynamic Group System that places NPC’s in empty spots, then players would not need to spend hours looking for people. This system can also be used to create solo content, and create tutorials to teach players how to perform their role in a group.
Reducing the time to find a group.
Most people don’t like waiting around for an hour or more looking for enough people just to play the game they pay monthly to play. All the good stories are told through group content, and many players miss out on great stories and good battles by not being able to find people to play. New players don’t get much of a chance to experience old content, adding this dynamic group system would allow new players to see all the content. It would give value to content that is just taking up space on the server, and people can play the game on their schedule.
Solo Content
Since you are no longer limited to a specific number of players for group content, you can view group content as solo content. If one players wants to do an unpopular instance or they are undergeared to do the instances everyone else is doing, they can group with npc’s and gear up without needing other players. This system also encourages designers to create better content rather than just having mosnter’s that are easy enough to kill by yourself.
Role Tutorial
One issue when first starting a new character, you don’t have any idea how to switch from leveling mode into group mode and perform your role. I would also like to see solo content that teaches new players how to perform their roles for group play. A player would join a team of NPC’s to defeat a powerful enemy. The purpose is not only to defeat the enemy but to also perform your duties. If you’re a healer you have to keep your tank alive, if you’re a tank you have to learn how to hold the monsters attention, or as dps you have to learn to control your character so you don’t take the enemies attention, but not go so slow where your tank dies. Support characters would have objectives like keeping everyone but the tank alive, using the right buffs, interupting spells and etc. It could also be used so that new players can determine if they like their role before investing months into leveling their character. No one wants to invest that much time to figure out which class they like.
So by adding this dynamic group system, designers could make content to teach players their roles for group play, create solo content, and reuse old content once ignored by not being able to find other players.
Sphere: Related Content
March 18th, 2009 in
Game Design,
MMO |
No Comments
In Mid-late January 09 I weighed 190 lbs. By March 3rd I was 165. I lost 25 lbs in a few weeks and I only changed my diet. A result I attribute to having found the last piece of the weight loss trifecta I thought I had been practicing.
I’m an athletic guy, I workout at least 3 times a week, run a couple nights and play soccer on the weekend. I’m 5′6″ and I weighed 190 lbs. I did not look my weight; many people who only weighed 15-20 lbs more than me were chubby with big bellies that ate anything. I thought I was just heavyset for my size, I figured I had to be since I exercised so frequently, sometimes twice a day; and I never eat junk food. I thought I had diet and exercise down and accepted that I was just heavy.
It finally sunk in around mid January. I was talking to my coworker when they said “most weight loss can be attributed to portion control and eating right.” I never did eat large portions, and I exercised a lot. That’s when I realized I wasn’t placing enough importance on what I ate. Once I had the last piece of the weight loss puzzle I lost weight; I finally found the trifecta of weight loss: Excercise, Portion Control, and a Balanced Diet.
Excercise
Everyone knows you need exercise, this isn’t news to anyone. I will say the most important part about exercising is pushing yourself hard. I do not agree that jogging is good enough, you should run. You don’t need to run lots of miles unless you’re training for a race. My rule when running is if it feels like a comfortable pace, then it’s not quick enough.
I do not lift weights, but I do sit-ups and push-ups and free weight exercises in my garage. Again, a set of each in rapid succession (withotu catching my breath) to get my heartrate up. You don’t need a gym to workout; and if you are afraid of attending one when you start you can workout at home without gym equipment.See the No gym no excuses article on Men’s Health.
I would even recomend staying away from lifting weights. Some people will tell you otherwise, but you should concetrate entirely on losing weight before you build muscle. If you take on too much at once, you’re likely to fail and quit. This doesn’t mean avoid the gym, as it might be your only place to do any kind of workout. You really don’t want to go on a quest to lose weight only to replace it with muscle weight, there is an extreme upside to knowing you are losing weight by watching the scale drop. This is a very important psychological state to your continued commitment to weight loss and a healthy lifestyle.
Portion Control
Luckily I was already very good at portion control when I started; this is arguably the hardest step, and I had it down. You can train your body, and you won’t have to sacrifice your appetite. I recall what lead me down this path to begin, but let me tell you the bits of information that lead me there.
The sensation for thirst is so weak it is often confused for hunger.
If you feel hungry, you might not be truly hungry. Try drinking water. Ever wonder how you were supposed to get those 64 ozs a day? If you drink every time you feel like a snack, you’ll easily reach that mark. I used to hate water and it’s tasteless sensation; but after drinking what felt like gallons a day (I was in college and didn’t have money for food) I became addicted to it! Yes you read that right. The more I forced myself to drink it, the more I grew to love it, and it helped me curb my hunger.
Eating more often, trains your body to believe it will receive food often and that it does not need to store the food in long time storage (fat).
This is the second and most important step in portion control. Know before you start eating that you will not finish. You might be hungry when you reach the cutoff point, but wait two hours and devour the rest. You can view the leftover portion as a snack to eat later.
Balanced Diet
This is the part I thought I had down but did not. I was eating too many carbohydrate’s; and I did not realise what it was doing to my body. I figured I needed them for all the excercising I was doing. I was wrong. Instead of buying spaghetti and mac & cheese, I bought bags of frozen veggies and pre cooked chicken breast strips. I also gave up lunches for a cup of yogurt. (The yogurt is just enough to get me to dinner by whic h time I am thoroughly hungry.)
I still drink beer as often as I used to, I’m not afraid to cheat at dinner, and I still eat pasta the night before soccer games. My diet is now balanced and I’m returning to a healthy body weight and just as importantly; shape. I may not have seen much change myself but I’ve had countless people tell me I’m thinner. Complements I was not expecting.
Sphere: Related Content
Another promising contender suffers a setback; after seeing yet another mmo close servers, I have to wonder when companies are going to realize you can’t beat the best at their own game. To understand why they’re the best you have to know how blizzard makes their games. First, they do not innovate, period. They take a promising genre and perfect it, they did it with real time strategy games (Starcraft), and they did it with action rpg games (Diablo). Neither was groundbreaking, but they made the games right. They did same with the MMO genre. They took what was already out there and perfected it.
To beat WoW, you need to redefine the game. In a series of articles I will discuss several systems that will turn an MMO into a casual yet demanding game that could trump WoW. It is a bold statement indeed, but what I present are not radical ideas; rather they are the next iteration in perfecting the genre. I have looked into wow and I can see a trend. I know what they are going to make for their next game, and knowing that will help companies start the next MMO race on the same level.
In this piece, I will discuss the leveling system. Simply put, there should not be one. Let’s delve into this in a FAQ style post.
What is leveling used for?
To determine when the player can train new spells, wield new weapons, and quest in certain areas. It is used to restrain the player to a specific route. Blizzard once wrote that wow is an amusement park; if that is so, then leveling is how they force you through the rides in order.
They also use this system when fighting other monsters/players. If a lower level attacks a higher level, their attack is reduced and the higher levels is increased. This part is just silly. The higher level player can easily take out a lower level since they have better gear, hit harder and have more health; why help them further?
If we don’t have leveling, how do we know when to give new spells?
Wow uses reputations nowadays to give rewards to players for earning a high status with that faction. You can turn reputations into how you ‘level’ up within your class. The more quests you do the more reputation you gain and when you attain the next reputation bracket, your trainers will teach you new spells.
Wow gives you 3 talent trees and skills within them, and when you reach the end game, you have the same class as everyone else. You can use this reputation system to customize your classes. If you select which reputations you wish to earn, then you decide which spells or abilities your class learns; making it your own.
How do we determine when a player can use a powerful weapon?
As a player ranks up, they also earn attributes like strength, agility and intellect. These attributes could be used to limit what items a player can equip or carrying a particular reputation level. There’s plenty of ways to limit this.
How will players know when they can particpate in end game raids?
Actually, why limit it. Let new players enjoy the end game, even if they don’t contribute as much as a higher rank, they can still participate and earn reputation as well. Not every end game content has to be like this, so you could limit some to a particular rank designation of their class, but it’s a nice way of including low level players in the end game.
Do monsters give experience? Wouldn’t giving reputation just replicate experience?
If you just renamed experience to reputation you would have the same system with a different name. While it is possible it should be avoided.
I would not give reputation or experience upon the death of a monster, only upon the completion of quests. When monsters no longer give experience; it will make botting much more difficult now that they cannot blindly and methodically kill monsters to level up. We want players to feel like they earned their hero status. Mindless slaughter or some random animal and collecting their pelts should not qualify the person as a hero. Defeating enemies, protecting the weak and bringing riches to the poor should increase the reputation of the player.
The leveling/experience system allows designers to be lazy; put forth a little effort up front and you’ll have a system in place that will open up the game to your players.
Sphere: Related Content
This is a simple extension method that can be added to retrieve a bitmap of any control. It can be as specific as a text box, or image viewer, or as general as your entire application.
1 2 3 4 5 6 7
| public static Bitmap GetImage(this Control obj)
{
obj.CreateGraphics();
var bmp = new Bitmap(obj.Width, obj.Height);
obj.DrawToBitmap(bmp, new Rectangle(0, 0, obj.Width, obj.Height));
return bmp;
} |
Sphere: Related Content
You can easily find the differences between datasets, dataviews, data tables or any collection using Linq and Enumerables. This is useful if you just want to view the changes that have been made, or if you want to determine if the two datasets match each other, say for testing purposes.
Our first example is a simple list. First convert both lists to enumerables. Then intersect the two.
Enumerable<SomeObject> diff = List<SomeObject>.AsEnumerable().Intersect(List<SomeObject>.AsEnumerable());
Our diff enumerable will contain all the elements that are different. If you already have enumerables, then this is as simple as calling intersect. Any elements in the diff list will be the elements that do not occur in both lists.
Assert.IsTrue(diff.Count() == 0);
If we have a count greater than zero, then our two lists do not contain the same elements. So if our resulting count is zero, our two enumerables are equal.
In order to do the same with datasets, dataviews and data tables we’ll first need to reference the DataTable Extensions methods library. This will open up extension methods to convert data tables to enumerables. Once we get our enumerable, we simply call intersect in the same manner as before.
var resultsDiff = DataSet.Tables[0].AsEnumerable().Intersect(DataSet.Tables[0].AsEnumerable());
Assert.IsTrue(resultsDiff.Count() == 0);
If you’re working with datasets or dataviews, you need to get to the underlying data table in order to use the extension method to convert it into an enumerable.
Sphere: Related Content