Question About Game Development

GameDevMich

Honored Hero
I am currently in college or 6th form we uk people call it, anyway am not 100% sure yet but I am very much looking towards something game related at uni, and over this summer I have started learning the basics of C++.

Q1: Out of the "C" languages is C++ the most useful language?
Q2: Do you happen to know any good free compliers I can use to pratice my skills, and maybe C++ tutorials? I already know a couple of tutroials but I was wondeirng if you recommand any.

Yay! Back to coding topics. It's good to hear you are thinking of pursuing games. There are definitely less stressful and higher paying engineer jobs out there, but none of them are as fun and challenging as game development. You are in for a ride.

Q1: It depends on what you are creating. If you are creating tools for Windows, the top choice right now is C# and WPF. C++ developers hate it, due to the layers of abstraction and paradigm shift. Rather than a traditional approach to programming, Microsoft adopted Model View View Model (MVVM) for WPF. When I first read up on it, my brain hurt. Once you wrap your head around it, the pearly gates of rapid prototyping and advanced tools development open. A major flaw is that you lose cross-platform capabilities. If you want to create tools for multiple platforms, you will need to select a different system like QT.

If you are more interested in creating games (instead of tools), this kind of topic has resulted in many epic flamewars on other forums. "May language is better than your language for ___ reasons." I tried to illustrate this on the first page of replies. There is not one useful language that rules them all. You have to pick fits your needs.

Need to create a tool for OS X: Objective-C using the Cocoa framework
Need to make game for iPhone: Objective-C using the iOS SDK
Game for Xbox Live Indie and PC: C# and XNA framework
Game for all major platforms: Usually C++ with some kind of helper like a Javascript interpreter or Mono.

I could keep going. C++ is pretty much the go-to language for the serious projects that need full control of a system. Unlike C#, you have to manage your memory. This means allocation, pointers and a wide range of other topics. C# takes a lot of that burden off your plate and lets you focus on the structures of programming. I've become a huge fan of Objective-C and C#, due to their reflective nature and fun concepts that C++ doesn't support. I still work with C++ daily, but I also work with the other languages depending on a project.

Q2: Yup! If you are on Windows, use Visual Studio Express. Microsoft provides it for free and the current version is 2010. They provide VS Express C#, Visual Basic, C++ and more. If you are on OS X (Mac), you can get Xcode for free as well. In fact, you MUST use it for OS X or iOS applications. Apple doesn't give you many options, but what they do provide is pretty solid stuff.

As for tutorials, there are thousands. I honestly do not know where to begin with tutorials. Your first stop for C++ should probably be MSDN, which is Microsoft's developer documentation. It should get you going pretty well. I'm still a big fan of books, since you can take those with you anywhere and continue to learn. I always push the Read. Read Code. Code agenda, so books are essential to my learning.
 

HellzHere

Member
Game for all major platforms: Usually C++ with some kind of helper like a Javascript interpreter or Mono.

Thanks for the reply, am probably the group listed above. I have been using Visual Studio Express and yea its really nice tbh.

Q3: Lets say a game gets devoloped for like a year, you ofcourse get paid during the year. But when the game is realeased, depending on how well it does do you get extra pay? Like COD for example, every single year it makes record sales, do the devolpers get extra money when its released because of this success?
Q4: Could you explain functions to me please :) I just dont get them at all
 

GameDevMich

Honored Hero
Thanks for the reply, am probably the group listed above. I have been using Visual Studio Express and yea its really nice tbh.

Q3: Lets say a game gets devoloped for like a year, you ofcourse get paid during the year. But when the game is realeased, depending on how well it does do you get extra pay? Like COD for example, every single year it makes record sales, do the devolpers get extra money when its released because of this success?
Q4: Could you explain functions to me please :) I just dont get them at all

Q3: What you are referring to is commonly known as revenue share, "rev share" in short. You would need to have this included in your work agreement/contract. For big games like COD, you do not usually see the lower end developers with this kind of perk. The lead producers are usually the ones with a stake in the game's success. Of course, when the rev share gets really big, you might see some conflict between the leads and the company. Just look at what happened with the recent turmoil between Activision and the COD studio heads.

Rev share is a lot more common with indie game projects, especially ones with a shoe-string budget. They may not have enough up-front cash to pay someone to do some coding or artwork, so they will often agree to providing rev share when the game is finished. More times than not, this is a gamble. Not every indie game is a run-away success, so the chances of getting enough revenue to account for the work are kind of low. I typically would not accept a contract for programming for rev share, unless the game is near completion and the work is well defined. Development contractor rates can be quite high, which will attract only those serious enough to finish the game.

Q4: Functions can be tricky at first, but once you write a few you will get the hang of them. Let's stick with C++, since that seems to be your focus. Functions allow your code to be more modular. You can use them instead of having a single main function, riddled with goto lines (don't ever use goto!) and a massive loop. For the sake of simplicity, I will focus on stand-alone functions. Here is the basic syntax of a function:

Code:
// Function comment
returntype name ( parameter1, parameter2, parameter3, … )
{
    // Comments explaining the functionality
    statements;
}

returntype - The result of this function. Keywords include void (returns nothing), int (returns a numeric value, bool (returns a true/1 or false/0) and so on. You can have a function return anything, including entire classes or structures.

name - What your function is called. You want to name your function based on what it does. A good example would be getRandomNumber, which will return a random number between a range.

parameter1, parameter2, parameter3, … - These are values you send to the function to help it do its job. Not every function requires parameters, so this can be completely empty. However, parameters make the function more modular, which means it can do the same job with multiple possibilities.

statements; - This is the actual functionality of the code

Let's look at a very basic example.

Code:
// A utility function that returns the sum of two values
// value1 - The first non-floating point number
// value2 - The second non-floating point number
// return - An integer containing the sum of value1 and value2
int addValues(int value1, int value2)
{
  // Perform the add operation
  int sum = value1 + value2;

  // Return the result
  return sum;
}

Time to use it:

Code:
int sum = 0;
int value1 = 5;
int value2 = 3;

sum = addValues(value1, value2);

// sum should now be 8

value1 = sum;
value2 = sum;

sum = addValues(value1, value2);

// Sum should now be 16

Now, that example function is overkill. You can perform the basic add operation anywhere in your code, so you do not need a function to help with that. However, what you wanted to add two arrays together? That's where a function becomes useful:
Code:
int valueSet1[5];
int valueSet2[5];

There is no operator that easily adds those two together. A solution to that problem could get complex:

Code:
int* newSet( int* firstSet, int* secondSet)
{
    int* newIntSet;

  // do the code here

  return newIntSet;
}

From here, functions can get complex. There is not enough room on this forum for me to cover all the topics on functions, so here is a link to a decent site that helps explain the basics of C++: http://www.cplusplus.com/.
 

Dacil

Member
I've only been exploring coding for two days now (a total of about 6 hours) and it's oddly becoming a natural thing for me to read and understand....is this a good sign!? or am I getting my hopes up that it will come natural to me?

edit: actually your post above is a good example...two days ago i'd have no freaking idea what you're talking about, but now its like mhm mhm
 

GameDevMich

Honored Hero
I've only been exploring coding for two days now (a total of about 6 hours) and it's oddly becoming a natural thing for me to read and understand....is this a good sign!? or am I getting my hopes up that it will come natural to me?

edit: actually your post above is a good example...two days ago i'd have no freaking idea what you're talking about, but now its like mhm mhm
It's a great sign. I believe there are three core components to programming:

1. Syntax. It's akin to learning a new language, just like Spanish or English. This is the easiest part
2. Application. Putting together your own programs. Writing new code that eventually compiles. This is the fun part
3. Theory. This covers coding methodology, paradigms, rules, etc. This is actually the hardest part.

Learning how to write a function covers all three, though C++ is like a twisted rabbit hole when it comes to any topic. Functions are not simple, they just seem that way when you are writing something like an addition routine. There is a whole catalog of topics that follow the basics: class methods, function overloading, function pointers, and more.

Still, you're off to a good start.
 

Dacil

Member
It's a great sign. I believe there are three core components to programming:

1. Syntax. It's akin to learning a new language, just like Spanish or English. This is the easiest part
2. Application. Putting together your own programs. Writing new code that eventually compiles. This is the fun part
3. Theory. This covers coding methodology, paradigms, rules, etc. This is actually the hardest part.

Learning how to write a function covers all three, though C++ is like a twisted rabbit hole when it comes to any topic. Functions are not simple, they just seem that way when you are writing something like an addition routine. There is a whole catalog of topics that follow the basics: class methods, function overloading, function pointers, and more.

Still, you're off to a good start.
ohhh interesting...yeah i'm kind of daunted by the #2 part....putting together my own...but at this point i think i should be.. <_<
 

GameDevMich

Honored Hero
Well, I left out the most intimidating one just to keep this in scope: innovation. I'm talking about the folks who came up with shaders, the ones who create design patterns, the insane ones that come up with a concept like reflection (trippy topic). One of the best lessons is to not get overwhelmed. If at any point you read a new subject or attempt a new exercise and find yourself lost, go back and study the previous stuff. Patience and passion is what drives you forward.

…and it's not always glamourous. I spent three hours tracing a bug today. I didn't get a chance to work on the demos or previously logged bugs. Someone I was working with couldn't get his particles to show up in a level. I peaked over his shoulder to see what was happening, then just started digging in the code. It came down to a single save button that was performing some F'd up voodoo in the editor framework. Three hours to just find the bug, I haven't fixed it yet. That's my tomorrow morning at 7am. Yes, 7am, because I spend an hour (starting at 6am) answering e-mails and interacting with our GarageGames community.

That's a whole separate topic if it is ever brought: development communities. They aren't as different from a gaming community, like this one, as some would like to believe.
 

GameDevMich

Honored Hero
Regarding questions from HellzHere and Dacil about programming, I subscribed to a certain mentality about the work. My boss (CEO) broke programming down to a core process, which I believe in: problem solving. The bulk of your programming work will be solving problems. If you get caught up in all the facets and try to fulfill every single one, you will fall down a rabbit hole. Just start with the core idea of solving problems and you will make great progress.

For example, making a game. That's a really broad and daunting challenge, but you can break it down by asking questions that lead to problems to solve. Time to go vertical:

1. How do I render stuff to the screen?
2. What features do I want?
2. What rendering API should I use?
3. What kind of paradigm should I use for controlling the renderer?
4. What should the managers be for each render pass?
5. How should each pass transition in priority?

I can keep going until I get down to bite-size pieces of code, which is a lot easier to handle than just "write a renderer for a game." During your programming studies, try this approach. Your first few projects will be simple, but just remember they are going to be problems to solve, not some programming black magic =)
 

Dacil

Member
well idk if I'll be problem solving code much...it seems I just found out we'll be using the software Game Maker and possibly Alice....I'm very pissed off about it because it seems there's little coding involved at all (that's only my first impression). So what do you know about these two software programs if anything? If you do know some or everything about them, how is working in these programs going to help lay foundation to what you guys actually do?

These programs make it "easy" to make games blah blah blah...blah.. which is kind of what I don't want...I've never been a fan of "easy" ways. I want to learn what will benefit me the best.
 

WildFire

Warrior of Linux
I have attempted to learn python in the past, and I understand the general syntax rules, functions (what commands do what - how I know so much about IRC commands & other stuff) and started to get a grasp on it. However, anything I have started to read (i.e books, official python documentation) ends up in a deadend because I understand the theory behind the code, but then there is nothing really there on how to start to code. (Read code to Code section of your infamous statement) Then the level of knowledge needed to progress on to the next level suddenly goes up.

I feel that I'd need something (or someone) there to guide me through, but there's nothing that I can find to do this - how best do you think I could solve this problem?

However, I will apparently be starting visual basic in college on my computing course. Do you think that will suit me better, and if so, how? I don't know that much about it either, should probably research it.
 

57thEnryu

Member
Right now my student carrier is on hold in leiu of no money, but I've always wanted some kind of carreir in design. I origionally wanted to be an architect, then when I entered college I went into Geo-Eng (a combo of geology and architecture interestingly enough). I've since moved passed that after realizing I wasn't good at it.

Right now I'm in geography, which is the closest thing my college offers for artsy/architecture. And while I love the homework (I'll often spend hours on it making it look just right) I still feel this is not really for me. So really my question is do you have an online class or something you could reccomend that I can get my feet wet in game design (since I have some experience as a geographer probly map design or something of the sorts) so I can see if I want to venture down this path?
 

GameDevMich

Honored Hero
Sorry for the delay folks. The crunch mode that was talked about on the first page has struck hard. 10 hours Friday, 12 hours Saturday (6am to 6pm), 9 hours Sunday, 9 hours Monday…and those were the days we had "off" at GarageGames. Then I got back to regular 10 hour days Tuesday, Wednesday and today. I just deleted an entire paragraph of this post talking about "burn out", because it seemed like mindless rambling. I'll cover that topic on a later date if someone wants to know about it.

Tonight is my first night without coding in the past week, so I'm going to step away from the computer before I rage punch it. I will respond to Dacil, Fireblasto and 57thEnryu in the morning, as they all asked excellent questions.
 

Dacil

Member
oh jeez, that's insaaaane! take your time responding to me, that's a pretty crazy week ya just had
 

GameDevMich

Honored Hero
well idk if I'll be problem solving code much...it seems I just found out we'll be using the software Game Maker and possibly Alice....I'm very pissed off about it because it seems there's little coding involved at all (that's only my first impression). So what do you know about these two software programs if anything? If you do know some or everything about them, how is working in these programs going to help lay foundation to what you guys actually do?

These programs make it "easy" to make games blah blah blah...blah.. which is kind of what I don't want...I've never been a fan of "easy" ways. I want to learn what will benefit me the best.

So there is good news and bad news. Good news: there is still a level of programming involved with Game Maker and Alice. You can still learn the fundamentals of game logic via their simple scripting languages. That's always going to be valuable.

Bad news: The knowledge of syntax and paradigms do not transfer. They are not C++, C#, Objective-C or any other traditional language. What you learn for those programs can only be used for those programs. If this concerns you, I highly recommend you start up a side project when you have time. Pick up a book or take on another program that provides knowledge that can more easily transfer. This is what I did all through my education and continue even today.
 

GameDevMich

Honored Hero
I have attempted to learn python in the past, and I understand the general syntax rules, functions (what commands do what - how I know so much about IRC commands & other stuff) and started to get a grasp on it. However, anything I have started to read (i.e books, official python documentation) ends up in a deadend because I understand the theory behind the code, but then there is nothing really there on how to start to code. (Read code to Code section of your infamous statement) Then the level of knowledge needed to progress on to the next level suddenly goes up.

I feel that I'd need something (or someone) there to guide me through, but there's nothing that I can find to do this - how best do you think I could solve this problem?

However, I will apparently be starting visual basic in college on my computing course. Do you think that will suit me better, and if so, how? I don't know that much about it either, should probably research it.
No doubt it can be tough. The first couple of lessons of any book or programming site can usually be easy to get through. The difficulty of programming definitely jumps suddenly, so you need to take your time. Programming can be evil in such a way that it gives you enough rope to hang yourself very early.

If you have had trouble focusing or cannot quite make it to the next level on your own, then the next step is definitely to take classes of some kind. Someone with more experience can guide you more easily and answer your questions when you struggle. Visual Basic is a solid starter language. It can pave the road to other languages that can be more powerful. The foundation of programming is not always the syntax, but the concepts.
 

GameDevMich

Honored Hero
Right now my student carrier is on hold in leiu of no money, but I've always wanted some kind of carreir in design. I origionally wanted to be an architect, then when I entered college I went into Geo-Eng (a combo of geology and architecture interestingly enough). I've since moved passed that after realizing I wasn't good at it.

Right now I'm in geography, which is the closest thing my college offers for artsy/architecture. And while I love the homework (I'll often spend hours on it making it look just right) I still feel this is not really for me. So really my question is do you have an online class or something you could reccomend that I can get my feet wet in game design (since I have some experience as a geographer probly map design or something of the sorts) so I can see if I want to venture down this path?

I was worried I would have to shatter the game designer dream at some point in this thread. In my opinion, there is not suitable online course in game design that will land you a job. If you look at the credits of any major game, you will notice there is typically only one or two game designers. The rest are programmers, artists, producers and QA.

The production career is how you get into a game designer position. You will also need a strong degree in something like English and literature, anything that can show your strong written skills. Most producers and designers are promoted from within, or hired from another company at the same level. The path to becoming a producer is usually QA tester -> QA Lead -> Associate Producer -> Producer -> Senior Producer -> Executive Producer.

As you can see, there are a lot of milestones in that career track. I myself started off thinking I wanted to be a game designer. Reality hit hard and fast, which led me to focus completely on a development career path. I have picked up skills along the way that could lead to a game design position, such as documentation engineer and associate Producer, but it's not an easy or stable position. What is more realistic is a level designer position, which you mentioned. You can start getting that experience now by using various game engines to create levels. Strong candidates include Torque 3D and UDK, which have powerful suites of level editing tools.

Additional useful skills for level designers include: concept art background, 3D modeling, understanding of architecture, QA background.
 

Dacil

Member
So there is good news and bad news. Good news: there is still a level of programming involved with Game Maker and Alice. You can still learn the fundamentals of game logic via their simple scripting languages. That's always going to be valuable.

Bad news: The knowledge of syntax and paradigms do not transfer. They are not C++, C#, Objective-C or any other traditional language. What you learn for those programs can only be used for those programs. If this concerns you, I highly recommend you start up a side project when you have time. Pick up a book or take on another program that provides knowledge that can more easily transfer. This is what I did all through my education and continue even today.
aw darn, thought that would be the case =( but thanks for confirming it! I'll probably pick up a book and read in my free time! thanks!
 

57thEnryu

Member
Additional useful skills for level designers include: concept art background,
Not much of a concept artist (I mean, I can do it but not the best).

GameDevMich said:
3D modeling,
I can do 3d modeling decent, but not for organic things like the human form or plants, mostly buildings and such. I used to mess around alot on Google's SketchUp, uploading alot of my models to the 3D Warehouse (my models), some of them like the battleship and the p-40 look off, but stuff like the clock or the Gundam look lovely.

GameDevMich said:
understanding of architecture,
Oh yah, Architecture was always my goal in college but UNR doesn't have a degree for that.

GameDevMich said:
QA background.
only beta's I've been accepted to are open betas, never a closed one (well, world of tanks, but they accepted just about everyone who applied...)
 
Top