My Problems with SWTOR PvP

Posted: February 14, 2012 in Uncategorized

I will preface this post by saying that I love SWTOR PvP. The combat is very dynamic and interesting. The moves are fun (at least on a Mercenary) and overall the combat system was pretty well thought out.

That said, most if not all MMORPGs have the problems when starting out. SWTOR is no exception. Below, I will describe what I find wrong with SWTORs PvP system overall (including the gear progression, dailies, etc.)

Ilum

I have talked about my dislike of Ilum previously (in this post), but I needed to mention it. I will not go in depth into what I find wrong with Ilum (as I did that in the post linked), But I will list some of its problems:

  • Boring/Frustrating Daily
  • Kills not counting toward your daily count
  • Almost always empty on low pop servers
  • If not empty, the population is severely skewed towards one side.

Getting Gear

Getting the PvP gear in SWTOR can be very frustrating. The system itself is overly complicated, with a total of five different commendations that you can trade for gear, only 1 of which you earn through Warzones. You earn Warzone commendations, which you can then trade for Mercenary commendations (30 Warzone per 10 Mercenary). You use Warzone and Mercenary commendations (200 of each) to buy champion bags. These bags drop Centurion and Champion commendations (15 and 7, respectively) and have a low chance to drop tokens which you can trade directly for gear. The Champion and Centurion commendations can also be traded for gear. The last type is Battlemaster commendations, which you can use to buy Battlemaster gear. These are a rare drop in Battlemaster bags (kind of like the Champion tokens) which you can only get from the two PvP dailies (collect 30 armaments/kill 30 enemies in Ilum, and win 3 warzones). Battlemaster bags also drop Champion commendations (15 each). That was a mouthful! If it takes me an entire paragraph to explain the loot system for PvP, then its probably a little too complicated!

One of the biggest problems with this system as well, is the randomness. I (and many others) are ok with having a long grind to get PvP gear, but random number generation has no place in PvP gear progression. Before the latest patch (which changed the system to the above. Before Champion bags only have 3 Centurion Commendations, and Battlemaster bags only gave 3 Champion commendations) it was even worse, as people relied on the random tokens to get their gear. This resulted in people being lucky and unlucky, with some players getting 3-4/5 of the champion set in a few days, while some still only have 2 pieces after nearly a month. You could also get duplicate tokens, resulting in many people never getting the chest and head slot, but having 5-6 boots or gloves. I, for example, have full Champion/Battlemaster gear, except for my main hand weapon.

Bioware could easily make the system  a lot simpler, while keeping the gear progression grind. For example, if they simply restricted Champion PvP gear to those with champion valor rank (50), and allowing it (as well as Centurion PvP gear) to be brought with Warzone commendations (and/or mercenary commendations if they must), the grind changes from grinding bags and hoping to get lucky, to grinding valor. This is how Battlemaster gear works anyways, since you have to be valor rank 60 to wear it! It could take the same amount of time (or potentially longer) but people actually have a tangible goal they are working towards. Centurion gear could be available to everyone, regardless of rank, so that level 50’s below rank 50 don’t get abused by those with gear. They also would avoid the gear gap between fresh level 50s, and those with good gear, since Centurion armor would be fairly easy to purchase. And, this would simplify the system to two types of commendations.

The Various Exploits and Bugs

I’m sure Bioware is working on this very hard, but there are still many bugs and exploits that is really killing PvP. For example, the bug where you get logged out of game upon entering a Warzone, or the bug where Warzone wins don’t count towards your daily. The most irritating things are the exploits. There are exploits where you can get more than 8 players on your team. There is also a Jedi Sage exploit/hack which leads to the player doing insane damage. Exploits like these absolutely need to be fixed as soon as possible, or many people will quit.

Server Imbalances

Most servers have a population imbalance favoring Imperial players. More people have simply joined Imperials rather than the republic. This is one of the main causes of the problems with Ilum, but it also has more negative effects on the PvP. If you are an imperial player, Warzone queues can take forever at level 50, and about 90% of the Warzones played are Huttball. These problems can be fixed multiple ways. The way I hope they will fix it is by allowing free server transfers, and merging some of the low population servers. What will most likely end up happening is cross server Warzones. I am against cross server Warzones personally. I’m not going to get into my reasoning in this post (as that deserves a post of its own) but the gist of it is that cross server Warzones really take away from the server community.

Overall, while SWTOR PvP is fun, these things (among other more minor issues, that could be considered under glitches or bugs) are really ruining the experience. I hope Bioware is able to fix these problems soon, so we can all go back to enjoying the heck out of the PvP!

In SWTOR (Star Wars the Old Republic), once you hit level 50 you gain access to a level 50 only planet called Ilum. This planet has some daily repeatable PvE quests, but the main function of the planet is the world PvP area (in which there is a daily and weekly which you can get PvP gear from). The problem with this area is that its… well… boring and severely lacking in PvP! The cause of this problem, in my opinion, is that aside from those trying to grind for their PvP gear, there is really nothing there thats worthwhile. What ends up happening is that, especially on low population servers, the whole area is either empty, or completely one sided (usually in favor of the imps) so actual PvP either doesn’t happen, or is essentially a gang bang with many players of one faction killing a few of the other. What follows is my ideas for making Ilum worthwhile and fun!

 

Turn it into a level 50 hub

One of the main problems with Ilum is that its simply empty, and there really isn’t any reason to spend more than an hour at the most on Ilum (mainly to finish the PvP daily). What Bioware should do is turn this area into a Hub so players are drawn to it, or at least willing to spend a little more time than the time it takes to finish the daily. In order to make it a Hub, they could add a few things to the bases that you would only find in the Fleet or capitol city of the factions. These could be more vendors (specifically the PvP gear vendors at the least), a mail box, the PvPand PvE  mission box (so we can pick up the PvP daily/weekly here, as well as the PvE daily, since there are a few flash points on Ilum), the Galactic Trade Network, and more! Doing this won’t solve the fact that Ilum is empty, but it could help keep people on Ilum who usually just come for the daily, and then leave for the fleet immediately afterwards.

Change the PvP Daily

The Ilum PvP daily is one of the worst PvP dailies i’ve ever seen. You can complete the daily without even seeing a player of the opposing faction (and I often do, being on a low population server with a pretty severe faction imbalance). For those who don’t know, the PvP daily quest has you collect 30 “armaments” or kill 30 enemies (or a combination of the 2, like kill 5 people and collet 25 armaments). Farming item nodes is Not PvP. The simplest correction would be to revert the daily back to what it used to be, which is to take control of one of the assaults 5 times. Unfortunately, what used to happen is the two factions would sit in an assault (generally center from my experience) and basically trade control of it back and forth without even touching each other. To fix this, the developers could require that all enemy players (out of stealth, to prevent abuse by stealth characters) be eliminated before you can take control of the area.

Another possible change could be to require only kills, rather than having armaments or other quest items to collect. This would most likely be bad though, especially on low population servers where the opposing faction (usually the Republic) is always outnumbered. At the least the PvP daily would take MUCH longer, and would be much more frustrating.

If Bioware refuses to change the PvP daily, the least they could do is increase the spawn rate of the armaments, and have them spawn in other areas besides he central assault.

Add a Faction Wide Buff

Right now, as I’ve mentioned, there is really no reason to go to Ilum besides the daily quest. Even then, there is no reason to stay on Ilum once you have completed it. If Bioware were to add a faction wide buff for controlling Ilum, players  buff, and damage boost in PvE would suffice. They could have a Flash point that is only accessible to the faction that controls Ilum. Regardless of what the buff does, anything that affects the whole faction in a good way would be an incentive for going to Ilum. If you combine this with my idea above for changing the daily, I think you would definitely see more fights and PvP in general on Ilum.

 

Fix the Faction Imbalance

Now this is a difficult problem to tackle. You can’t force people to reroll, and you can’t just change someones character to one of the opposing faction. There are some solutions however. Merging low population servers would definitely help. Bioware could also lower the population cap on the PvP area of Ilum itself, so that if there are a bunch of one faction, and very few of the others, at least one phase could have some fair fights. Beyond that, I’m not sure what other solutions are out there, but the faction imbalance (which can be very severe on certain servers) really needs to be addressed!

 

There are more ways in which Ilum could be fixed, but I believe that the above suggestions address the most important problems of Ilum. If you have some suggestions, leave them in the comments!

Before I get into the actual topic of this post, I want to apologize to all my potential readers. I’ve been very bad lately about making posts, mainly because I’ve been playing Star Wars: The Old Republic almost nonstop since I got the game. So sorry readers, but I’m going to make it up to you, I swear!

First, a couple of notes about the game itself (I plan on doing a write up/review of the game at a later point):

I absolutely love the game, but it isn’t without its flaws. First a few good things:

  • The Story, in true BioWare fashion, is incredibly well done. The attention to detail for all the various story lines (not just the class story lines, which were admittedly incredible) is incredibly refined.
  • The combat is very dynamic and refreshing.
  • SWTOR has the best leveling/questing I have experienced in an MMO. Leveling and questing is exciting, and even after I have played through most of the non class stories once, its still enjoyable thanks to the fact that you can play through the quests differently (My main, a level 50 bounty Hunter, was light side, and my alt, a level 12 Imperial Agent, is being played through as dark side

And of course, as I mentioned there are some flaws. Here are a few things that need some work

  • The game gets quite laggy when you have a lot of different players on the screen
  • Not many graphics options/settings for optimizing performance
  • End game content is lacking a little bit
  • World PVP is almost nonexistant, especially if playing on a low population server

 

PvPing as a Mercenary

For those who don’t know, Mercenary is one of the Advanced Classes of the Imperial Bounty Hunter class (which is mirrored by the Trooper on Republic side). Mercenary’s can specialize in either damage, or healing. I will be focusing on using the Arsenal spec, which is damage, but I will touch upon Body Gaurd, which is the healing spec.

Tracer Missile. Good spell to use, bad spell to spam

Arsenal specced Mercenaries are capable of putting out some insane damage! However, many novice Mercenaries don’t quite understand the class, and especially the role that the Mercenary’s main damaging attack, Tracer Missile, plays in a Mercenary’s spell rotation. If you happen to frequent the SWTOR forums, you have undoubtedly heard a lot of complaining about “Tracer Missile spam”. Tracer missile, for those who don’t know, is a spell with no cooldown, and solid damage. Many novice Mercenaries, for lack of experience, will end up simply spamming this spell over and over again. This can result in decent damage, but those who do this are easily shut down by a smart player, whether it be through going around corners to break line of sight (hereby referred to as LOS) or interrupting/silencing the Merc while tracer is being cast.

There are many reasons why simply spamming tracer missile is a bad idea. The main problem is simply that if you only spam tracer missile, you are really missing out on most of your damage. Tracer missile, while it has pretty good damage, is actually one of the lowest damaging spells of the Bounty Hunter, beating only missile blast, and explosive dart (and maybe another one or two that have slipped my mind). The second problem is that, while Tracer only costs 16 heat, spamming it is a great way of running out of heat (or rather, generating way too much) quickly.

Using Tracer missiles correctly, fortunately, is very straight forward. Tracer missile is essentially a set up spell. It sets a Merc up to do a lot of damage with their other spells, specially Heat Seeker Missile, Rail Shot, and Unload. Tracer Missile adds a debuff called Heat Signature to the target that reduces their armor by 4% per stack . This debuff stacks up to 5 times (which results in 20% armor reduction at 5 stacks. This stacks with High velocity Gas Cylinder, which results in 55% armor penetration!), and if you are fully specced into the arsenal tree, it adds two stacks of this debuff per hit of Tracer Missile. In addition, it also adds a buff (that similarly stacks up to 5 times) called Tracer Lock, which increases the damage of the next rail shot by 6% (so 30% rail shot damage increase at 5 Tracer Lock stacks). And in addition to all of this, Heat Seeker Missile gets its damage increased by 5% per heat signature on the target (so 25% increase at 5 stacks). But wait, theres more! Tracer missile (assuming your are fully specced into arsenal) also has a 30% chance to finish the cooldown of Unload, and increase the damage of the next unload by 25%.

As you can see, Tracer missile isn’t for spamming, but rather to be used as an opener for the rest of your skills! At most, you should shoot 5 tracer missiles at a target (To get the max stacks of Tracer Lock), and definitely not 5 in a row. One of the problems with Mercs is their lack of mobility, and sitting and shooting more tracer missiles than necessary doesn’t help.

My personal preference is to start of with an explosive dart, and then shoot a most 3 tracer missiles at a target to start off my rotation (this assumes, of course, that I don’t need to move around) followed immediately by a Heat Seeker Missile. This gives you he full 5 stacks Heat Signatures on your target, giving you the max Heat Seeker Missile damage. Under optimal conditions (optimal being that i’m no being harassed or focused, and can stand still) I will follow this up with an unload. Because of the 30% chance for the improved Unload (mentioned above) you have a 90% chance for your unload to do 25% more damage! Tracer missile has a 1.5 second cast time, and unload has a 3 second channel time (assuming you aren’t damaged, and don’t lose one of the unload damage ticks), so in total, you can do this combo in about 8-10 seconds (4.5 for tracers, 3 for unload, and the global cooldown for Heat Seeker Missile cast, which is an instant cast spell). This Combo can do some Insane damage. My Bounty Hunter has Full champion gear (with a couple pieces of Battlemaster gear) and his combo can do upwards of 15k  damage on a squishy target if you get very lucky with crits! I’ve been able to essentially get a kill on low health/squishy enemies with this rotation. However,  I can pull off about 7-10k damage  fairly reliably if the target has low armor, 5-8k on a high armor/beefy target.

However, this assumes that I get lucky and have great positioning while being left alone (or focused by one or two enemy players) As I mentioned, mobility for a Arsenal specced Merc is a problem, especially in Huttball, where mobility rules! If I can’t pull off the unload after the 3 Tracer missiles and Heatseeker Missle, I will instead use rail shot. This allows me to still do some awesome damage (rail shot damage is increased by 15%, which isn’t the max increase, but is still quite good!) while having a lot more mobility.

Kite, Kite, Kite!

Another very important aspect of playing a Merc is being able to kite. For those who don’t know, kiting is basically running outside of melee range from a melee class, while still doing damage. Bounty Hunters have two knock back spells on fairly low cooldown. Rocket Punch and and Jet Boost. Jet Boost is the strongest push back, and will knock a player quite a ways away from you. The Rocket Punch push back is much shorter, but it also has a shorter cooldown. Using this spells correctly is crucial when trying to kite a melee enemy, especially a Jedi/Sith that have charge spells. One thing to remember is that Jedi/Sith can charge you twice in a very short amount of time. So you need to be prepared to use rocket punch right after Jet Boost if they end up recharging you after the initial Jet Boost.

Many Mercs simply don’t know how to counter melee who are in their face, especially if they recharge you after Jet Boost. Mercs do the most damage while standing still, but standing still against a melee will only result in interrupts and stuns, so you need to keep your distance. Here are a few tips for fighting melee as a Merc

  • Don’t be afraid to use Energy Shield in a fight with a melee! Kolto Overload is also a great spell to use (especially in conjunction with Energy shield. I generally pop energy shield against a melee when I hit about 50-60% health.
  • As I mentioned, always be prepared to rocket punch right after jet boost if the enemy charges you after a knock back.
  • If they don’t or can’t charge you after the initial Jet Boost (if they are an Imperial Agent or Smuggler for example) hit them with tracers while they try to get close. I can generally get 2 tracer missiles in before a melee can get back to me if they are pushed back the full distance.
  • If they DO  re-charge immediately after being pushed back, and you rocket punch, most good melee will be able to interrupt a tracer before you can cast it because Rocket Punch doesn’t push back very far. I have found that using Unload rather than tracer after a Rocket Punch is a good way to get in some damage without having your tracer missle interrupted.
  • Fake Cast! If they are all up in your Face, DO NOT CAST Tracer Missile outright. I like to cast Fusion missile instead to eat the interrupt, and follow that immediately by a tracer.
  • Use your Instant casts! Starting off with an explosive dart against a melee, followed by rocket punch is pretty good burst, and a crit with one of these spells can lead to a nice burst without having to stand still.
  • Don’t be afraid to use Power surge to turn a Tracer missile into an instant cast if you need to hit them with damage, or to turn Rapid scan into an instant heal if you are running low on health.
  • Use your Environment to your benefit. This is especially true in Huttball, where you can push melee of the edges of the rafters, or into one of the hazards. Unfortunately this tip can be somewhat difficult to follow in The Civil War and Voidstar Warzones.

 

Healing

I spend the majority of my time PvPing as a damage spec Merc, but I do have quite a bit of experience as a Healer. Healing as a Merc can take some getting used to, but Healing Mercs are one of the best combat medics! A couple of tips and tricks that I’ve learned.

  • If someone is getting focused hard, don’t be afraid to use Power Surge in combination with Rapid scan followed by an Emergency scan (the Instant heal spell) to give the person you are healing a boost.
  • Super Charged Gas is a GREAT way of not only reducing your heat, but also being able to heal faster and for more, and is great for controlling your cooldowns. Don’t be afraid to use it! It has no cooldown, and getting 30 stacks for the spell is very easy if you are healing alot!
  • When healing, try to heal your target with a healing scan followed by rapid scan instead of simply spamming rapid scan. Healing scan, when fully specced into Body Guard, not only reduces the heat cost of Rapid scan, but also increases the armor of your target.
  • Don’t forget that Kolto Shell can only be deployed on ONE target. Choose this target wisely! I tend to put this on myself unless i’m healing a ball carrier in huttball, or a high priority ally in Civil War/Voidstar.
  • Don’t be afraid to demand a guard from one of the tanks. Healers are one of the first people targeted by the enemy, and Guards not only let you last a lot longer, but is also somewhat of a deterrent to being attacked. Its extremely difficult to kill a healer while he/she is gaurded, especially if they are healing themselves
  • Kolto Missile is a great heal, is instant cost, and Costs NO HEAT! Use it as much as possible! Its not only useful for AOE heals either, its a great way to heal yourself when you are being focused and on the run.
  • Using rapid shots on an ally in between heals is a great way to manage your heat while keeping your players up!
  • The targeting system can be a bit of a pain, so always target an ally via the Ops box, rather than clicking their actual character.

 

I plan on writing a much more comprehensive PvP guide on Mercs in the future, but this has some good tips and tricks that I’ve learned so far as a heavy PvPer. Hope this helps newer and veteran Mercs out!

 

I originally started using Google+ fairly late in its beta, about a month before Google released the social network to the public. when I first signed up, I admittedly didn’t really get it at first. Not many of my friends had actually signed up yet at that point, so my stream was pretty much empty. At that point, I was trying to use Google+ like Facebook, and this lead to very poor results. Eventually, I ran across a tutorial that detailed how to get the most out of Google+, and from that point, I fell in love with it!

I was unable to find the original tutorial I found, but for those interested, the following article has most of the information that I originally read: http://www.cio.com/article/685930/10_Google_Tips_for_Beginners

 

Google+ is NOT Facebook

As I stated above, when I first started using Google+, I expected to be able to just use it like Facebook, and get similar results. However, as I learned, this is the wrong way to go about it. Google’s social network isn’t a Facebook replacement. The paradigm of Google+ is much different than Facebook. Facebook has a much more intimate vibe, where you only have one group, which is friends, and people who wish to interact with you have to send a friend request that you must accept in order for them to do so. With Google+, there is no friends list per se. Rather, there are what Google calls circles, which are much more flexible than Facebook’s friends list. Like Twitter, you can follow someone (or in Google+ terms, add them to your circles), but that person does not have to follow you back. If they don’t follow you back, you will only be able to see posts that they make public.

 

Circles

The circles that I mentioned above are a huge step forward relative to Facebook’s friend list, and Twitters followers. For one, you can have many different circles (like in real life, where you may have a bunch of friends, but some are on different levels of intimacy with you) which allows you to group people together who share similar content. This gives you the intimacy that Facebook’s friends list provides (assuming that you group all of your close friends in 1 circle), but also gives you similar functionality to Twitter. Google+’s circles makes Google+ into a combination of both Facebook and Twitter, and allows you to seamlessly switch between whichever  type of social network you want your feed to emulate. Circles also greatly improves on the paradigm that Twitter uses, since, unlike Twitter, you have many different circles, so you can pick and choose what content you want to see in your stream whenever you want. If you want to switch to a Facebook style feed, that is also very easy. When you wish to share, you can select which circles that particular status goes to, and of course you can also share publicly, so even people who you haven’t circled, or haven’t even circled you can see.

Overall, the circles system in Google+ is vastly superior to the system that Facebook and Twitter have.

 

Hangouts

For those who don’t know, Hangouts in Google+ are kind of like informal conference calls. You, and whoever else is in the hangout can video chat with each other, watch Youtube videos together, and much more. I personally don’t find myself using Hangouts very much, since i’m a fairly shy person and don’t really enjoy video chats in general, but Hangouts are one of the most popular Google+ features. It’s also a feature that is unique to Google+. Hangouts are an awesome way to catch up with family, learn about various things (Universities and other learning institutions are starting to use Google+ hangouts for free lessons and such), or meet new people who have similar interests.  Today, Google announced a low bandwidth option for Hangouts so now even people in remote locations, or with low bandwidth internet can enjoy Hangouts. This is one of the most awesome features of Google+, and really adds to the overall feel of it.

 

Other Features

Google+ has many other features besides Hangouts and the Circles system. For one, Google has been integrating Google+ with most of their other services (notably Google Apps, Gmail, and Youtube), which adds an excellent social layer to each of those services. Another cool feature is sparks, which gives you the ability to not only have streams for your different circles (and your main stream which you can pick and choose what circles can put content into it) but you can also have streams based on subjects. For example, I have a stream dedicated to video games. This stream shows public posts by Google+ users that have to do with video games, as well as various articles on the internet on video games. This allows you to still see a lot of relevant content even if you don’t have many people in your circles. Google+ also has the many standard social network features, like the ability to chat and send messages, an API for apps on the Google+ platform, and web based games that are tied to your Google+ account. The Google+ apps API and games platform are both in the fairly early stages of development, so they are certainly not as robust as Facebook, but the potential is there.

 

Quick Tips

While I am certainly no expert on Google+, I can offer some tips for those who want to try Google+, or currently have an account, but aren’t happy with the content in their stream.

First, figure out what kind of content you are interested in, and write those topics down, or remember them. Next, go to the search bar, and type in one of the topics. For example, if I wanted to view content on Video games, I would type “Video Games” into the Google+ search bar.  Once you have done this, click the button below the search bar that says “Save this Search.” Upon doing this, you should see a new entry in your streams (the right panel of the page). Congratulations, you just created your first spark! You can use these sparks to see interesting content, which includes public posts by Google+ users, and articles on the internet. If you see someone post some content that you find interesting or like, you should then follow that person by adding them to the relevant circle.

Another great use of the search bar is finding whole circles that you can follow. Google+ allows users to share their entire circles, and adding these premade circles is a great way to quickly fill your stream with relevant interesting content. Most posts which share circles are shared publicly, so its easy to find them. First, you want to decide what kind of circle you want to add, and do a search for it. For example, if I wanted to try to find a Gamer circle, I would search for “Gamer circles” in the Google+ search bar. If you need to filter the results (so you don’t see non Google+ posts), you can do so by selecting Google+ posts only in the drop down filtering box under the search bar.

 

 

In closing, I highly recommend that everyone joins Google+, especially if you love geek related content as Google+ has a very large, very active techy community! And if you decide to join Google+, make sure you add me! If you can’t find me, simply leave a commend here and i’ll circle you.

Picking the first language to learn for novice programmers can be a daunting task. For many, they simply have no clear where to start, and don’t know any of the merits and drawbacks of the various choices they have. Even among experienced programmers, the debate on what new programmers should start with is long and has many different sides. In this article I will give my side.

My Perspective

Before I talk about which language people should start trying to learn first, I will discuss where I am coming from when I make that choice. The first language someone learns in my opinion should be fairly easy to develop with, and be able to give the programmer results fairly quickly. The main problem I generally see with fledgling programmers just starting out is that they get very frustrated with error messages, and in general struggle to connect the concepts they are working with to an actual useful program. I keep these things in mind when making my choice.

 

My Opinion

For new programmers, I highly recommend starting with a web development related language, namely Javascript or PHP, PHP being the first recommendation. The reason I say this is simple. PHP is a very easy language to program in. As a scripting language,  development goes much faster (no having to recompile upon changing a single line of code), and the language itself is much more forgiving. A new user doesn’t have to memorize many different syntactical rules, so all they have to focus on is understanding the concepts, and getting practice with solving problems. Also, PHP (and to an extent, Javascript) comes right out of the box with many various helper functions and algorithms that in other languages you need to either import a library, or write the function yourself. This allows novice programmers to solve problems much faster and easier. However, this comes with a drawback. A programmer who gets used to PHP having a lot of functionality built in that other languages don’t have by default may make it difficult for the programmer to migrate to different languages/platforms. On the other hand, while the programmer may become too reliant on these built in functions, they do know to some extent how to solve a similar problem with another language. The new problem becomes finding out how the other language implements the functionality used in the built in PHP function, or how to write it themselves.

The second reason I suggest PHP (or Javascript), and web development in general is because it makes using the various concepts they’ve learned in practice more rewarding. It is much easier to make an interactive GUI with PHP combined with HTML/CSS than with a programming language like C++, Java, or even Python. Because of this, its much easier to make a “cool” application even with only basic skills. Making a website where you can log in and see a welcome screen is extremely easy with PHP and HTML, but would be much more difficult for a novice in, say, C++ or Java.

 

Drawbacks

While learning PHP (or web development in general) first is not a bad idea, there are some drawbacks. One thing, which I mentioned earlier in this post, was that many novice users who use PHP may become dependent on the built in functions that aren’t available in other languages without either importing a library, or writing the code yourself. This can make transitioning to a more difficult language even harder. This type of problem isn’t unique to PHP either, but common to people who start with most scripting languages, and than transition to a more difficult, stricter language. For example, in my school, the introductory programming class used Python, while the next class (Object Oriented Programming) is taught using C++. Many of the students who go from the first class to the second struggle early in the class with the unavailability of certain functionality that they got so used to using in Python.

Another issue is bad habits that are easy to form with scripting languages. Since most scripting languages have no explicit typing, the concept of a variable with a type can be difficult to understand, especially if you have been programming for a good amount of time.

In general, since scripting languages or usually much easier than stricter programming languages, novice programmers are able to progress faster and without much frustration, but they can pick up bad habits, like the expectation of the language to provide certain functionality, or the expectation of the program to handle many things in the background that you have to set up yourself in stricter languages. The example that one may come to think of first is garbage collection, which is available in most scripting languages, and even some strict programming languages (most notable being Java), but not in, say, C++. Scripting languages also hide many of the core functionality that is inherent in the language from the user. This can create programmers who know how to do something a certain way, but have no idea of the concept behind what allows them to accomplish whatever goal they have. This makes it much harder for these programmers to solve more complex problems that require knowledge of how programs and the underlying code actually works. For example, a novice may figure out how to stop a certain PHP notice from occurring by using the notice suppression operator (the @ operator), but may have no clue why that operator actually fixes (well it doesn’t actually fix the error, but rather stops it from being reported) the error.

However, these problems can be resolved by going from learning an easy scripting language to learning a more difficult, stricter programming language like C++ (in fact, I highly recommend starting with PHP/Javascript and even MySQL if you are adventurous, and then learning C++ in depth). This way, the programmer gets the benefits of learning a very strict language like C++, where you essentially have full control over your program and therefore have to know not only how to solve problems, but why certain code and concepts solve the problem. Also, the programmer won’t be nearly as frustrated since they already have a language under their belt. The learning curve of C++ is high enough, but some of that difficulty can be mitigated if you already have practice with most or all of the basic programming concepts.

 

In short, for anyone who wishes to learn how to program and make applications, I suggest starting with web design, namely PHP (but Javascript, ASP, or any other web based language would work) because development is faster and easier for a novice programmer, and seeing the results of your knowledge and making cool, useful applications is much easier, especially if you want to incorporate some sort of GUI elements.

As a side note, since not everyone is interested in web design, or has the means to purchase a server (although you can always download software like LAMP, or WAMP to turn your computer into a local web server), other scripting languages will work as well. If you are going to go this route, I suggest Python personally.

 

If you have any questions or comments, or disagree with what I say, leave a comment below! I would love to have a discussion with someone who has a differing opinion from mine.

Out of boredom I decided to create a very simple wrapper class for mysql database management. This class, as I mentioned, is extremely simple. However, for those wishing to learn more about Object Oriented programming, and how to implement a class that is useful, this is a good place to start. Anyone wishing to learn more about OOP could take this basic class, and make it into something that is much more useful.

Note: This class is untested. I haven’t actually ran the code, but I reviwed it to make sure any simple syntax/conceptual errors were removed.

If there is a syntax error or anything you see, leave a comment below so I can fix it!

Functionality

The class has very limited functionality. It basically provides normal mysql functionality (like querying, fetching rows, and fetching all the rows of a result set) and has a built in sanitizing function.

Improvements

This class is by no means complete or even useful. However, there are many improvements that someone could add to this that would not only make this class fairly useful, but is also great practice. Some obvious improvements could be as follows:

  • function to build and execute a query based on function parameters (like table, what to select, and where/order by statements(s)
  • an insert function that builds and executes a query based on parameters (table to insert, array of columns, and an array of corresponding values
  • stronger validation/sanitization

There are many many more things you could add to this class. A little competition for the readers: Submit your version of the class below with added features. The best/coolest class will get a free page with links/advertisement to their website (or a website of their choice)


<?php
class DB_manager {
 private $database;//database you wish to connect to
 private $username;//mysql username
 private $password;//myysql password
 private $server;//mysql server to connect to
 private $link;//variable to hold mysql connection link
 private $currentResult = false;

 private $query;

 //simple error reporting function.
 private function reportError($error){
 echo $error;
 }

 //constructor
 public function __construct($username, $password, $server="localhost"){
 $this->server = $server;
 $this->username = $username;
 $this->password = $password;
 }

 //connect
 public function connect($database){
 $this->link=mysql_connect($this->server,$this->user,$this->pass);
 //make sure we connected correctly
 if (!$this->link) {//open failed
 $this->reportError("Could not connect to server: <b>$this->server</b>.");
 }
 $this->database = $database
 if(!@mysql_select_db($this->database, $this->link)) {//no database
 $this->reportError("Could not open database: <b>$this->database</b>.");
 }
 }

 //run query q
 public function query($q){
 $this->query = $this->string_escape($q);
 $this->currentResult = mysql_query($q);
 if (!$this->currentResult){
 $this->reportError("There was an error with your query: " . mysql_error();
 $this->currentResult = false;
 return false;
 }
 return $this->currentResult;
 }
 //returns row from the result a query returned
 public function fetch_row($assoc = true){
 if (!$this->currentResult){
 $this->reportError("There is no valid result set to return data from.");
 return false;
 }

 if ($assoc)
 return mysql_fetch_assoc($this->currentResult);
 else
 return mysql_fetch_array($this->currentResult);

 }

 public function string_escape($s){
 return mysql_real_escape_string($s);
 }

 public function fetch_all($assoc = true){
 if (!$this->currentResult)
 $this->reportError("There is no valid result set to return data from.");
 return false;
 }

 $array = [];
 if ($assoc)
 while ($row = mysql_fetch_assoc($this->currentResult)){
 $array[] = $row;
 }
 }
 else {
 while ($row = mysql_fetch_array($this->currentResult)){
 $array[] = $row;
 }
 }

 return $array;
 }
}

//usage
$db = new DB_Manager('username', 'password', 'server (usually localhost');
$db->connect("databse_name");

$db->query("SELECT * FROM sometable");

$rows = $db->fetch_all();

foreach($rows as $r){
 print_r($r);
}

&nbsp;

&nbsp;

?>

If you have any questions, leave a comment!

As requested by a user who left a comment on one of my previous posts, I have zipped up my asset folder (which includes all scripts, models (even the couple horrible models I created!), scenes, etc. in Lerpz 2). Because of size restraints, I had to leave off the extra music folder (which had random songs by a band called Muse that I was planning on using in various places in the game). Because of this, the final scene (the game end scene), and the first scene (the game menu scene)  may cause the game to crash or otherwise not work because I used songs from that folder. You will have use your own songs, and drag the corresponding songs to their correct places in the menu.

I have never actually tried to share a Unity scene(s) before, so I may have done this completely wrong. If this is incorrect, please let me know in the comments so I can fix the download.

As always, if you have any questions on my methodology, or general questions on how I completed the tutorial, leave them in the comments!

Use the following link to download: http://mediafire.com/?25z5efm0i80f679

The Elder Scrolls V: Skyrim is the latest addition to the Elder Scrolls (TES) series of Role Playing Games (RPGs) released by the developer studio Bethesda. The Elder Scrolls series has a long history, beginning with The Elder Scrolls: Arena released in 1994 for the PC. Followed by The Elder Scrolls: Daggerfall released in 1996 and a few unnumbered titles (Battle Spire, and TES adventures: Redgaurd) in the latter part of the 90s. In this Article, I will compare Skyrim to its two predecessors, Oblivion (the fourth game in the series, and the one that Skyrim followed) and Morrowind (the third part of the series, that Oblivion followed).

Skyrim

First let’s look at Skyrim itself. The original release build was riddled with bugs (something Bethesda fans now expect and accept), some of which were debilitating (preventing players from advancing though the main storyline). Historically, Elder Scrolls games tend to be relatively bug heavy. However, the extensive nature of the game makes releasing a bug free build near impossible, so it would be difficult to fault Bethesda, especially since patches were made exactly for this type of situation. Beyond the bugs, the game is absolutely fantastic. The game landscape itself is incredibly detailed and gorgeous, and this is an opinion from someone who is fanatical about their hatred of snow! The old trademark of the TES series, a wide expansive world where you can essentially do and be whatever character you wish, continues to be a dominant theme within in Skyrim (perhaps even stronger than it is in Oblivion arguably, but I digress. The main story line and various side and faction quest lines are well done for the most part. In fact, my only real gripe is with the Bard College quest “line” was inherently less robust. I was greatly disappointed that the Bard College quests lacked depth and were essentially a collection of disconnected fetch quests devoid of any overarching theme or quest chain. Moreover, not only could you not advance in the college, once you were done with the quest line, the college basically becomes useless, unless of course, you’re interested in the few skill trainers available. You can’t even learn to play an instrument!

The change to the skill system was awesome. Instead of the original system, where you had to have a specific class, and you could only level up by increasing your major and minor skills, you can level up from any skill increase. However, as you level up, you need more skill increases to level (as opposed to Oblivion and Morrowind, where you only needed 10 skill level ups, regardless of what level you are.) In addition, I really loved the new perk system that was introduced. It allowed them to simplify the skill system by reducing the amount of skills you have to keep track of, while letting you customize your character as much or more than you could in either Morrowind or Oblivion. Personally, I think it might have been better to have changed how many perk points you get per level. At a certain point, even with a high level in something, it becomes less useful than it would be in, say, Morrowind, because you may not have spent your perk points. For example, I can have a character with 70 smithing, but I wouldn’t be able to make iron or leather gear unless I invested skill points down that tree. When you get to a high level, leveling up, and obtaining perk points is more time consuming, so it becomes difficult to get to a desired skill level since you can’t just level up the skill anymore to be effective.

The crafting system in Skyrim is also vastly improved from that of its predecessors. In this current iteration you can actually make armor and weapons with the smithing skill, instead of just being able to repair your armor and weapons (via the “armorer” skill). This not only provides a function for the various mines you come across in Tamriel, but it’s another way to “be what you want!” When it comes to the enchanting skill I have mixed feelings. On one hand I like what they’ve done with disenchanting , basically giving a purpose to all the otherwise worthless magical items. However, I disapprove of their decision to make disenchanting the only means of learning now enchantments. Personally, I prefer the Morrowind system, where the enchantments you can do was based on the spells you know.

Comparison

As is the case with any sequel, inevitably there will be a comparison made between the sequel and its predecessor(s). Skyrim of course is no exception, so using my perspective let’s take a look at how Skyrim compares to Oblivion and Morrowind.

Many people (myself included) thought that Oblivion, while excellent in its own right, was a step backward compared to Morrowind and even Daggerfall. However, Skyrim does not follow this path. In my opinion, Skyrim is leaps and bounds ahead of Oblivion in nearly every aspect of the game. Skyrim improves on many of the more lackluster elements in Oblivion. For example, Skyrim’s crafting system is far superior to it predecessor.

Quests

The main quest in Skyrim is far more fun and engaging than in Oblivion. For me, the first couple of Oblivion gates I had to close were quite interesting, but eventually the game play becomes boring and stale. I found myself dreading coming across Oblivion gates in Oblivion because going inside was repetitive. It essentially boiled down to get in, bash skulls until you get to the right building, and activate the sigil to close the gate. These encounters were also incredibly time consuming. There is nothing I dislike more than being on my way to completing some unrelated quest, only to have to trudge through a long pseudo dungeon in order to continue. Of course, I’m sure I could have just skipped closing the gates, but I was sort of compelled by a sense of duty. It became kind of like a job, which is a description that no game should aspire to obtain. Skyrim’s version of these encounters (dragon attacks) are far superior; they are shorter, making it more of a temporary epic battle, rather than a long trudge through deadre after deadre. Notably, while the story is more engaging, it also feels shorter in its entirety. Despite disliking the long drawn out dungeon crawls to close various gates, I did find the story’s depth appealing. Conversely, Skyrim’s story feels much too short for such an epic tale. My senses tell me that I shouldn’t have been able to foil the plans of the “Eater of Worlds” so quickly, this is one aspect where Skyrim falls short. Morrowind’s story felt truly epic both in scale and in action. Although the actions in Skyrim’s main quest are great, it doesn’t quite have the depth required to meet the bar set by

Morrowind.

The same holds true for Skyrim’s faction quest lines. For example, when traversing the College of Winterhold quest chain, it seemed like it was just a random encounter and they decided that I would handle extremely important tasks right off the bat (well like 2 quests in). A few (in game) days later and I’m Arch-Mage just like that. At least in Oblivion, they have you doing menial tasks first so you at least rise through the ranks, but it seems like the College of Winterhold (and indeed the other factions as well) were just waiting for someone to come along to be named Arch-Mage. All the factions seemed be just an express lane to becoming their leader, rather than an organic guild that actually cares about someone rising through the ranks before they are tasked with important stuff. In Morrowind, when joining and completing quests for a guild, it actually seems like I’m rising through the ranks, rather than just randomly becoming the most important person in the guild overnight. While some people would be glad to be rid of the meaningless quests that acted as fillers before you were deemed important enough to get to the real work, these “meaningless” tasks actually added a lot to the role playing aspect of the game.

Game Mechanics

There are many game mechanics present in TES series that Skyrim really improved upon. Combat in Skyrim is the best implementation in the series bar none. The dual wielding mechanic was expertly done, and really makes combat much more fluid and organic, and dual wielding swords/maces/what have you is an awesome feeling! Casting spells is also much better now because of this new system. In Morrowind and Oblivion, while I loved the magic system, casting magic spells in combat just seemed clunky and awkward. However, sometimes I do find myself instinctively mashing the C key to no avail. As discussed, the crafting system far surpasses the implementation in the third and fourth installment of the series in most regards. I’m glad that they added back the Morrowind style fast travel (where you basically fast travel to preset locations by paying someone to take you there).

Unfortunately, there are also some mechanics in Skyrim that, in my opinion, are not improvements to the previous iterations in Morrowind and Oblivion. One glaring problem I discovered is the complete lack of Deadric armor/weapons in the game world. As far as I know (and I’ve done quite a bit of research in this area), you cannot find Deadric armor and weapons (aside from the artifacts that are rewards for the various Deadric quests) in the game world, but have to smith them yourself. I love the crafting system, but I don’t like being forced to level up a certain skill just to wear the best armor in the game. There should be other ways of getting Deadric armor that, while much harder than simply smithing it, is still available for those who don’t want to have a high level smithing character. Not to mention the need to not only level smithing, but get the correct perks as well.

I miss the ability to create your own spells. The spells in Skyrim are all quite satisfying (at least the destruction spells) but not having a way to create your own simply reduces a player’s choices when customizing their character. While I’m not privy to Bethesda’s rationale was for omitting this feature, I can’t imagine anything that could have justified the decision.

Bethesda also greatly simplified the armor system. Where originally you would have separate pieces for the chest, legs, etc. now you have fewer pieces (for example, armor is now what in Morrowind was a Cuirass, left and right pauldrens (shoulder armor) and greaves. Morrowind was a bit overboard, I think they simplified the armor too much. Essentially, what it comes down to is fewer choices for customization in exchange for simpler game play. I can appreciate wanting to simplify things that were a little too complicated, but it calls for a balancing act and in my opinion they leaned a little too far towards simplification. Moreover, it doesn’t stop at armor. The entire stat system has been completely jettisoned and you can no longer select becoming stronger, faster, or more intelligent. Now you simply pick whether you think you should have more health, stamina, or magicka, an oversimplification in my opinion that takes something substantial away from the game.

In Closing

Ultimately, I would give Skyrim a rating just below Morrowind, but above Oblivion. By itself it is an amazing (albeit buggy) game. Bethesda seems to be going along with the current trend in the gaming industry to simplify their game in an attempt to make it more accessible. However, while they were successful in certain aspects, other areas suffered from an oversimplified. Nevertheless, Bethesda delivered an awesome game, and I hope they keep delivering more!

This is the final article in a 4 part series on starting your first Unity project. This article will provide some basic scripts that are common among different genres. These are meant to be a starting point, and by no means are they complete.

Basic Movement

The following code moves an object by 1 unit in the x or z direction. It is very simple, but can easily be expanded. You can change this to work on a speed variable, and easily add acceleration or other basic physics.


if (Input.GetKeyDown("a") || Input.GetKeyDown("d")){
 deltaX = (Input.GetKeyDown("a")) ? -1 : 1;
}
if (Input.GetKeyDown("s") || Input.GetKeyDown("w")){
 deltaY = (Input.GetKeyDown("s")) ? -1 : 1;
}

transform.position += new Vector3(deltaX,0,deltaY);

This simpy uses the GetKeyDown function of the Input object to determine if the a, d, s, or w key is pressed, and if so act accordingly. Note, that GetKeyDown is only true on the frame that the key was pressed. If you want to check if a key is pressed, disregarding whether it has been pressed for a while or was just pressed, use GetKey instead.

Programmatically Instantiating Objects

Sometimes we need to instantiate different objects programmatically, rather than in the Unity editor. This is especially true for things like bullets, and enemies. Now, there are many different ways to instantiate something, but I will go over the basic methods. You can easily instantiate a primitive object (like a sphere, cube, or plain) or a model.

One way to instantiate your own models, is to create a reference variable (like we did in part 2 with inter script communication) and drag the object you want to instantiate onto your script in the inspector panel. Once you do this, we can do the following


var objectTransform : Transform;//reference variable to model

&nbsp;

var temp : GameObject = Instantiate(objectTransform, transform.position, Quaternion.identity);

This create whatever object you want to create at the location of the GameObject that has this script. You can of course change the location. The Quaternion.identity part is for the rotation. Rotation is stored at a Quaternion in Unity, and the identity Quaternion is essentially no rotation.

Tracking Points/Cash/Etc.

Tracking points is a fundamental part of most games, but can be somewhat tricky if you have a lot of different way to gain points spread across different scripts. The best and simplest way to keep track of points is to have a single script in charge of keeping track, adding and subtracting points, and setting up methods as interfaces that other functions can use. For example, we could do something like


//point tracking script: PointTracker.js
private var Points = 0;

function AddPoints(x){
 Points += x;
}

function RemovePoints(x){
 Points -= x;
}

&nbsp;

//usage
if (/*player did something awesome*/){
 var pt : PointTracker = GetComponent(PointTracker);
 pt.AddPoints(50);
}

However, this is more or less the same as if we just used a public variable. Changing the behavior of similar actions that generate the same amount of points would be tedious. However, we could use a system like the following


//point tracking system: PointTracker.js

private var Points = 0
enum PointType{ small = 50, medium = 100, large = 200 }

function AddPoints(type : PointType){
 if (type == PointType.small) Points += 50;
 if (type == PointType.medium) Points += 100;
 if (type == PointType.large) Points += 150;
}
function Remove(type : PointType){
 if (type == PointType.small) Points -= 50;
 if (type == PointType.medium) Points -= 100;
 if (type == PointType.large) Points -= 150;
}

//usage

&nbsp;

if (/*player did something awesome*/){
 var pt : PointTracker = GetComponent(PointTracker);
 pt.AddPoints(PointType.small);
}
if (/*player did something even more awesome*/){
 var pt : PointTracker = GetComponent(PointTracker);
 pt.AddPoints(PointType.medium);
}

This way, if we want to change the rules for how small point gains work, we only have to change it in 1 place, rather than many!

Basic Timing

Timing in games is very important. Unity provides you with a Timing class called Time, that we can use whenever we need to count something. For example, if you want something to happen every 5 minutes, you would need to do timing. Lets take an example. Say I want to print a message every 5 seconds. I could do


//print a message every 5 seconds
var lastPrint = 0;

function Update() {
if (Time.time - lastPrint > 5){
 print("A message printed every 5 seconds!");
}
}

Another, more practical example may be if I wanted to add something like a bullet delay.

//add 1 sec shooting delay
var lastShoot = 0;

function Update() {
if (Time.time – lastShoot > 1 && if (Input.GetKeyDown(“space”)){
//code to shoot a bullet in game
}
}

[/code]

That ends the four part series in starting Unity. If you have any questions, leave them in the comments below!

This is the third part in a four part series about starting your first project in Unity. This post will focus on GUI programming, and more specifically, a simple state based system. GUI programming is a rather broad topic, and so I will not be going over the more advance topics. I will not be going over similar topics like GUI styles, but rather the scripting involved with GUIs. There are many good GUI tutorials online, and there are even  a few on the Unity3D website!

State Based System:

This is a system (sometimes referred to as a Finite State Machine) where a program (or machine!) operates differently, depending on the different states it could be in. This type of system for a menu is perfect, for it allows us to neatly and efficiently show different screens and menu items depending on the state.

This system can be very simple, or rather complex depending on how complex your game is, but they all have certain similarities. They all depend on some variable or value that represents some state. Sometimes its an enum, sometimes a boolean, and sometimes an int. In my example, I will be using a boolean value. Before we get into a

GUI in Unity

Unity takes a step away from the normal GUI model in a very unique but elegant form. Instead of the general pattern or setting up some sort of GUI element, than setting up some sort of listener for it, and acting on events. Instead, Unity combines the creation of the GUI element, with its listener. Using an if statement, you can both check if, say, a button is being clicked. GUI elements are reserved to execution in an OnGUI() function. this function is called every cycle (like Update) and you should put all GUI related code here. Consider the following:


//All of this takes place in an OnGui() function
if (GUI.Button (new Rect(50,50,70,20) "Ok!")) {
//create a button
//if its pressed, we go into this code block
print("You pressed me!");

}

Other GUI elements (like Boxes and labels) can simply be created without any if statements, like so:


//box
GUI.Box (new Rect(150,150,300,500), "Box text. Use new lines \n to go to new lines!");
//label
GUI.Label (new Rect(150, 700, 300, 300, "Label Text");

Introducing states to this model is trivial. All we need to do is keep track of the right variables. I will show an example with two states, but you can add more states at your leisure.


var MainState = true;
var OtherState = false;

function OnGui(){
 if (MainState){
 //we are in the main state.
 //show button to go to other state
 if (GUI.Button (new Rect(50,50,100,20) "Other State!")) {
 MainState = false;
 OtherState = true;
 }
 }
 else if (Other State){
 //we are in the main state.
 //show button to go to other state
 if (GUI.Button (new Rect(50,50,100,20) "Main State!")) {
 MainState = true;
 OtherState = false;
 }
 }
}

As you can see, we use two variables, MainState, and OtherState, that we use to keep track of what state we are on. We could alternatively use an enum, 1 value for every state, and have one variable which we change the value of once. This way, we don”t have to remember to set every other state to false. However, this assumes that we only want one state active at a time. There are some times (like when we are showing the user an alert style message) where we don’t need or want to remove other GUI elements, like the main GUI toolbar, or something of equal importance.

To end this article, I will also provide the code for a helper function I have been able to make good use of. It basically returns a rectangle that can be used in a GUI function call centered in the middle of the screen.


function Center(w:float,h:float){
 //halve height and width
 var h2 : float = h/2;
 var w2 : float = h/2;

 var x : float = ScreenCenter.x - w2;
 var y : float = ScreenCenter.y - h2;
 //print (x + " " + y);

 return new Rect(x,y,w,h);
}

Click here to see the final entry in this four part series: http://wp.me/p1AGMt-5K