|
Have you ever wanted to program video games, either as a hobby or profession? I can remember back in High School I'd ponder about the people who would actually develop things like animations, computer games, console games, all sorts of things. The specific section that interested me the most, obviously, was video game development.
For the longest time I always considered people who develop video games far and out of reach. I just sort of assumed they were people who were really rich and had family that got them into that field of profession. I just had no clue how anyone would actually go about developing video games, or how they'd get there in the first place.
So I began to research. What I found is there are three main types of developers (and I included a couple more for accuracy):
- Programmers: they actually write code that is a translation of the software (game), which computers decode and then execute.
- Artists: these people create all the art for video games. There are two main sections of art: 2D and 3D.
- Designers: Game designers are the people that choose what goes where, and design how the actual game should be played and play out.
- Writers/Sound Engineers - As development teams become larger, roles required to develop a game become more and more specialized. This opens up positions dedicated to things like sound engineering, and writers!
I figured that programming games is what interests me most in life, and so I pursued it and am now studying at DigiPen, a highly specialized school aimed at getting people into video game development. Basically I know of two ways to get into game programming: learning on your own, or with a college degree. Here is a podcast talking about both options, featuring a very experienced developer Ben Ellinger: podcast. This podcast contains a wealth of information that is vital to anyone new to the idea of becoming a game programmer, I highly recommend listening to it!
Once I found out I was accepted to my school of choice I decided to document the steps and progress one undergoes from having no programming experience (almost), to becoming a video game programmer. And so I started my blog: CecilSunkure's Game Programming Blog. I don't believe an in-depth documentation of the process has ever been written before, and as such I hope to have a popular and helpful blog in the future! What better a chance to help people achieve something they'd love to learn than to have access to a wealth of knowledge from a top computer science school?
On various occasions I've tried to search for online sources and articles aimed at beginning programmers who don't know how to take basic knowledge and apply it to actually construct a game. There is tons and tons of information out there on advanced topics in game programming, and many articles on the beginning steps of learning to code, but hardly anything out there is aimed at the middle stage. Currently I feel I'm in that middle stage, which gives me an ideal opportunity to create content aimed at remedying such a deficit!
I've been ravaged with an epic case of busy this last couple months due to transitioning from SC2 to college, but I'm finally getting the hang of managing my time. As such I'm getting up and running with getting time into blog posts again. This is an awesome time for anyone interested in programming to get started, and they can even learn a lot about how to become a professional through the resources my blog provides!
I've started my first post in a series explaining how to construct, in C, a game from scratch using the Windows Console (command prompt) as the platform. The great thing about coding a game in the windows console is that it requires basically no overhead, nothing to download or install (assuming you use windows), and the art requirements are hugely decreased because the only things you can display in a windows console are ASCII characters! + Show Spoiler [Why ASCII?] +Now you might be thinking "but Cecil, what about UDK, or this or that or this pre-made engine???". Well let me tell you sir, making a game in an application someone else built is great for learning to create content. However, I'm not aiming at teaching anyone to create content right now, I'm aiming to help people get excited about learning to program. Coding a game in C on the Windows Console provides near-ideal circumstances for forcing people to focus their dev-time into learning just how to program effectively in a very fun and interesting way.
Screenshot of TerraNisi by Team qMopey
The reason I've chosen to focus on C is twofold: in the game industry 90% of video games are coded in C/C++. This is because the way C was written gets you as close as one can comfortably be (within reason) to the hardware. This means you have full control over everything, which is absolutely necessary for a real-time software application requiring high optimization. If you're serious about programming video games, I highly suggest learning C. Although I do love other languages like Flash and Python, C needs to be the primary focus for most any professional. The other reason is that since C++ should be your end goal if you wish to be able to work wherever you like, learning C thoroughly is a must. By becoming a competent C programmer, you learn the limitations of C. By learning the limitations of C you learn firsthand at a deep level of understanding how to make effective use of the features and advantages that C++ provides.
Concept mockup by Xion
In C the character datatype is a whole number in the range of 0 to 255 (if unsigned). This means that there are in total 256 different ASCII characters to use at your disposal when creating your own game. There's a lot of different tables for displaying all the ASCII characters, but I find this one the best - note that the indices are in hex not decimal:
ASCII table
Constructing the actual game requires a bit of setup in order to get a good looking window up and going. I've written some example code showing how to set up a console window with C (should be compatible all the way back to C89), in which I set the window's title, size, and screen buffer size. This is the template in which you can get started creating your own game. Here is the finalized example code from my blog post:
#include <windows.h> /* for HANDLE type, and console functions */ #include <stdio.h> /* standard input/output */
HANDLE wHnd; /* write (output) handle */ HANDLE rHnd; /* read (input handle */
int main(void) { /* Window size coordinates, be sure to start index at zero! */ SMALL_RECT windowSize = {0, 0, 69, 34};
/* A COORD struct for specificying the console's screen buffer dimensions */ COORD bufferSize = {70, 35}; /* initialize handles */ wHnd = GetStdHandle(STD_OUTPUT_HANDLE); rHnd = GetStdHandle(STD_INPUT_HANDLE); /* Set the console's title */ SetConsoleTitle("Our shiny new title!"); /* Set the window size */ SetConsoleWindowInfo(wHnd, TRUE, &windowSize);
/* Set the screen's buffer size */ SetConsoleScreenBufferSize(wHnd, bufferSize); getchar(); }
Just copy/paste this code and compile it to an exe, and you'll have a nice executable that creates a window, resizes it, resizes the window's screen buffer, and sets the title! I recommend using a simple compiler like Dev-C++, though I myself am using GCC within Cygwin (which is a giant pain to install for your first time).
The window you constructed!
Feel like you want to actually try writing something to the Windows Console now? Well I've written the second post in this series all about this! Here's the link to the post.
Finished example program of writing chars of random color to a console window.
In this post you can learn all about how to re-create the above image! Here's a code snippet showing the logic behind assigning random values to an off-screen buffer:
for (y = 0; y < HEIGHT; ++y) { for (x = 0; x < WIDTH; ++x) { consoleBuffer[x + WIDTH * y].Char.AsciiChar = (unsigned char)219; consoleBuffer[x + WIDTH * y].Attributes = rand() % 256; } } /* Write our character buffer (a single character currently) to the console buffer */ WriteConsoleOutputA(wHnd, &consoleBuffer, characterBufferSize, characterPosition, &consoleWriteArea);
This code is actually pretty interesting if you're new to arrays. If you don't know what an array is, go google it real fast and come back. This code here sets up an array called consoleBuffer, which is single dimensional array. The array has elements WIDTH * HEIGHT, and in order to index the array during a loop as if it were a two dimensional array, you need to use a formula. The idea behind the formula is to figure out what row you want to access, by taking the number of elements in a row and multiplying it by a value. To access the first row, you multiply the WIDTH value by 0. To access the fifth row, you'd multiply WIDTH by five. This works since as the single dimensional array is written to the screen with WriteConsoleOutput, it wraps around the screen buffer once ever WIDTH elements. Then, access a specific element within that row you add in your x value.
I'm extremely excited to get the rest of the posts in the series finished and provide some awesome content for beginning programmers to actually develop their own games! The other posts cover topics such as:
Hopefully this blog post will get some of you excited and interested in learning to program, especially learning to program a game. I feel learning some sort of programming language is extremely beneficial in developing as a person in general; after I learned how to think like a programmer it was honestly as if I found a new way of thinking entirely. I encourage anyone interested to get started immediately!
However, what if you're completely new to programming and know really just about nothing? Well, I've written a nice post about getting started with the C language, and I don't assume you know anything! In about an hour you can be well on your way to writing programs that deal with simple mathematical statements, and even print output of those statements onto the screen! Here's an excerpt from the blog post I wrote called I Want to Learn Programming, but I Know Nothing!:
+ Show Spoiler [Blog Excerpt] +CecilSunkure wrote on his Blog: So you want to learn to program. Great! So you're reading this article, and here you'll learn to start with C on a Windows Operating System. Starting with C is an excellent place to start, as it grounds you with a very solid base of understanding for programming in general, that of which I feel is easily transferable to other languages! I even feel that once you learn the basics of C and transfer to another language (I recommend Python!) you'll be better off in the long run than if you started with another language and then moved to C (perhaps start with Java and move to C). I won't get into deep details about this point as that's out of the scope of this article, but you should definitely take my word on the matter! ... You can write your C code in any text editor you like. You can just simply use notepad (to open hit windows key+r and type notepad, then hit enter), though I recommend using the IDE apart of Dev-C++. Once you write some C code, save your file as a .c file and then use a compiler to turn it into a .exe file. Now what about this compiler business. You might have already googled for a C compiler by now and noticed that there is a multitude of compilers out there. Luckily I have one to recommend to you! Download and install Dev-C++. When installing just install with all default settings. On your first run you must choose a language (probably English) and then you'll see a screen that looks like: You should just hit the green Next button, as this feature is actually useful later on. Hit yes again to create a cache now, followed by ok. Close the annoying tips toolbar once the program starts, and walla! You're now ready to code your C programs, and compile them! ...
Interesting links to get started: http://cecilsunkure.blogspot.com/ - Good wealth of resources to start programming, especially games http://forums.tigsource.com/index.php?topic=14588.0 - Awesome thread on ascii art, with tools to create http://labs.bp.io/2011/ascii-paint-bpio-fork.zip - My favorite tool to create ascii art http://www.bloodshed.net/devcpp.html - The compiler I first started using when messing with C http://www2.warwick.ac.uk/fac/sci/moac/students/peter_cock/cygwin/part1/ - How to install Cygwin to use the GCC compiler http://www.crimsoneditor.com/ - Favorite text editor for writing code
|
I'm in no way in tune with coding, but I always love talking to artists and developers. I feel like programmers get none of the recognition, and they have the hardest job in my opinion! However, the best games are made when all three of the branches are really communicating with each other. I mean, when the programming is based off of the art and the art is based off of the programming, then the developers choose what happens based on the result of the two. It's beautiful!!
For instance, I remember talking to one of Blizzard's artists about how creep soon after they announced SC2. I likened it to the hives that xenomorphs make in the alien series, and how I thought there was a lot of potential for zerg "absorbing/altering" their enviornments artistically. He agreed and said that the game would feature a lot more creep for just that reason, because it looked awesome and zergy! Anyways, the artists and developers got together and now look what we have, an important gameplay feature based off of what was originally an "artistic" inovation. Truly the mark of good management on Blizzard's end.
Sorry I would comment more on the OP but I have no idea what I'm looking at in terms of code, it looks super complicated so good job!
Also, you forgot writers as a part of the development team, there as much a part of it as artists are =[ just look at rpgs!
|
United States261 Posts
Thanks for the resources! I've been thinking of just making games as a hobby and this is a great start.
I have programmed a little in C but I've already forgotten a lot of things so it will be a nice refresher.
|
Aww I'm so jealous. I wanna work in the games industry too Please blog more often so I can pick stuff up from you :p
Good luck ! I respect and envy you for chasing your dreams.
|
I have a question. Right now I'm studying Game Design, but I've heard the position for Game Design is less demanding compared to programmers and artists. Is this true? Where do we fit in? I have no knowledge in programming and my art skill is very limited (even though, I know how to model characters with programs like 3ds Max, but it's not my desirable job position).
|
On November 17 2011 05:33 kaisen wrote: I have a question. Right now I'm studying Game Design, but I've heard the position for Game Design is less demanding compared to programmers and artists. Is this true? Where do we fit in? I have no knowledge in programming and my art skill is very limited (even though, I know how to model characters with programs like 3ds Max, but it's not my desirable job position). I've worked professionally at a game development studio working on Age of Empires Online, and the designers there were actually critical. Basically, as a development studio gets larger in numbers of employees, the studio can tackle larger projects. The larger the studio, the larger their projects are. In order for this to work, each employee added to the company makes the employees of the company more and more specialized. In smaller studios, especially, indi developers, people can be a generalist; they can program, do art, design, production all at once. But in a highly specialized position, you do a more narrow set of jobs but you do them very very well.
Designers are needed and in my opinion especially critical for larger projects. There are different sections of game design, however. At GPG (gas powered games) I worked mostly with a single designer focused on Player vs Player experience - we balanced the multiplayer game. There were other level designers, lead designers, designers that work for the publisher as a liaison, and concept artists (which sorta spill into design). So to answer your question honestly, I feel that there is a strong need in the industry for highly skilled and valuable designers, but there is a lot less demand for entry-level design positions. Because of this designers here at DigiPen study design alongside with something else. Here you can be a designer with a heavy programming background, or heavy art-focused background. It's sort of funny, the CS focused design degree here is basically identical to the dedicated CS degree for the first year. This makes you more versatile and competent as a designer overall.
Hope that helps!
|
If I can only gain some motivation to do it.
|
On November 17 2011 05:26 Endymion wrote: I'm in no way in tune with coding, but I always love talking to artists and developers. I feel like programmers get none of the recognition, and they have the hardest job in my opinion! However, the best games are made when all three of the branches are really communicating with each other. I mean, when the programming is based off of the art and the art is based off of the programming, then the developers choose what happens based on the result of the two. It's beautiful!!
For instance, I remember talking to one of Blizzard's artists about how creep soon after they announced SC2. I likened it to the hives that xenomorphs make in the alien series, and how I thought there was a lot of potential for zerg "absorbing/altering" their enviornments artistically. He agreed and said that the game would feature a lot more creep for just that reason, because it looked awesome and zergy! Anyways, the artists and developers got together and now look what we have, an important gameplay feature based off of what was originally an "artistic" inovation. Truly the mark of good management on Blizzard's end.
Sorry I would comment more on the OP but I have no idea what I'm looking at in terms of code, it looks super complicated so good job!
Also, you forgot writers as a part of the development team, there as much a part of it as artists are =[ just look at rpgs! Thanks for the awesome input! Yeah I remember hearing similar about Creep in some video, was very inspiring
And you're totally right about the writers! I added in another section for more specialized role.
|
This might sound silly but what does one have to do to become a game designer?
|
On November 17 2011 05:18 CecilSunkure wrote:So I began to research. What I found is there are three main types of developers: - Programmers
- Artists
- Designers
- Writers/Sound Engineers
At first I scratched my head, then I realized that like any good C programmer you started at an index of 0.
Edit: Also scratching my head about writers and sound engineers sharing a spot on the list!
BTW, best of luck to you with your career in game development.
|
On November 17 2011 05:46 wattabeast wrote: This might sound silly but what does one have to do to become a game designer?
I'm not in the games industry, but I work in animation, which has a similar team structure and approach. Here's what you have to know about getting into a creative position like game designer:
1) Everyone wants to do it, even in the business. Software engineers, customer support people, game testers, animators, most of them dream of being the Game Designer, or better yet Senior Game Designer or VP of Game Design.
2) Some people get into that kind of role just by designing their own games in their spare time until they get enough attention to get hired somewhere on a big project. The odds on this make it much like being struck by lighting and getting hit by a meteorite at the same time.
3) Most game designers probably started out at some other point in the process, working as a software engineer, game tester, animator, or possibly even as a customer support person, and wound up developing the contacts and having the conversations with the people around them that led someone in charge to think it would make sense to take a chance on that person being part of their game design team.
Substitute "motion picture director" for "game designer" and you have the story of my industry also.
|
On November 17 2011 05:40 CecilSunkure wrote:Show nested quote +On November 17 2011 05:33 kaisen wrote: I have a question. Right now I'm studying Game Design, but I've heard the position for Game Design is less demanding compared to programmers and artists. Is this true? Where do we fit in? I have no knowledge in programming and my art skill is very limited (even though, I know how to model characters with programs like 3ds Max, but it's not my desirable job position). I've worked professionally at a game development studio working on Age of Empires Online, and the designers there were actually critical. Basically, as a development studio gets larger in numbers of employees, the studio can tackle larger projects. The larger the studio, the larger their projects are. In order for this to work, each employee added to the company makes the employees of the company more and more specialized. In smaller studios, especially, indi developers, people can be a generalist; they can program, do art, design, production all at once. But in a highly specialized position, you do a more narrow set of jobs but you do them very very well. Designers are needed and in my opinion especially critical for larger projects. There are different sections of game design, however. At GPG (gas powered games) I worked mostly with a single designer focused on Player vs Player experience - we balanced the multiplayer game. There were other level designers, lead designers, designers that work for the publisher as a liaison, and concept artists (which sorta spill into design). So to answer your question honestly, I feel that there is a strong need in the industry for highly skilled and valuable designers, but there is a lot less demand for entry-level design positions. Because of this designers here at DigiPen study design alongside with something else. Here you can be a designer with a heavy programming background, or heavy art-focused background. It's sort of funny, the CS focused design degree here is basically identical to the dedicated CS degree for the first year. This makes you more versatile and competent as a designer overall. Hope that helps! Didn't seem like it when you talked on skype half the time at work and wrote guides there.
(L) Randy~
|
On November 17 2011 06:05 Lysenko wrote:Show nested quote +On November 17 2011 05:46 wattabeast wrote: This might sound silly but what does one have to do to become a game designer? I'm not in the games industry, but I work in animation, which has a similar team structure and approach. Here's what you have to know about getting into a creative position like game designer: 1) Everyone wants to do it, even in the business. Software engineers, customer support people, game testers, animators, most of them dream of being the Game Designer, or better yet Senior Game Designer or VP of Game Design. 2) Some people get into that kind of role just by designing their own games in their spare time until they get enough attention to get hired somewhere on a big project. The odds on this make it much like being struck by lighting and getting hit by a meteorite at the same time. 3) Most game designers probably started out at some other point in the process, working as a software engineer, game tester, animator, or possibly even as a customer support person, and wound up developing the contacts and having the conversations with the people around them that led someone in charge to think it would make sense to take a chance on that person being part of their game design team. Substitute "motion picture director" for "game designer" and you have the story of my industry also.
OO, you work in the animation field? I study 3d animation currently in my 3rd year in uni and I feel so overwhelmed by the knewledge I have to aquire in order to land a job next year. T_T, any advise?
|
On November 17 2011 06:15 Steveling wrote: OO, you work in the animation field? I study 3d animation currently in my 3rd year in uni and I feel so overwhelmed by the knewledge I have to aquire in order to land a job next year. T_T, any advise?
It's probably a bad idea to take up space in the OP's blog to talk about this. I'll send you a PM.
|
Awesome blog, I'm very interested in developing video games as well. I'm currently in HS, learning Java in my C.S. class. I hear that C is very similar to Java, so I figure in the future I can easily learn C, but I've never really known where to go from there. I'll definitely check out the podcast and your game blog. Looks awesome =)
|
On November 17 2011 06:31 ClysmiC wrote: Awesome blog, I'm very interested in developing video games as well. I'm currently in HS, learning Java in my C.S. class. I hear that C is very similar to Java, so I figure in the future I can easily learn C, but I've never really known where to go from there. I'll definitely check out the podcast and your game blog. Looks awesome =) C is similar to Java in terms of syntax and how it looks but it is quite different to program with. But once you know 1 language it isn't so hard to pick up others.
|
On November 17 2011 06:31 ClysmiC wrote: I hear that C is very similar to Java, so I figure in the future I can easily learn C, but I've never really known where to go from there.
Being a proficient C programmer requires having a pretty good mental model for how data structures are laid out in memory and how the processor implements different data types. Much of that is hidden from you in Java, where memory management is taken care of for you and you have an exception mechanism that lets you very simply catch and deal with unexpected errors.
Expect to have to put in some significant effort getting your head around those matters. You'll find there's a period of time when you think you're a proficient C programmer, but you're actually not. It's kind of like Starcraft in that regard. :D
|
Great blog, looking forward to more. I'm pursuing a CS computer graphics degree and made a 3D engine/game for a class before and its then when I realised that all the Java we've been using for the other CS stuff is killing me in C++ lol.
Edit: listening to the podcast, how do you reverse the screen...?
|
Do you know Ludum Dare? I like their 48h game competition There are a lot of great ideas and ingenuity to find there!
http://www.ludumdare.com/compo/
Get inspired and make great games! :D
|
On November 17 2011 06:10 KawaiiRice wrote:Show nested quote +On November 17 2011 05:40 CecilSunkure wrote:On November 17 2011 05:33 kaisen wrote: I have a question. Right now I'm studying Game Design, but I've heard the position for Game Design is less demanding compared to programmers and artists. Is this true? Where do we fit in? I have no knowledge in programming and my art skill is very limited (even though, I know how to model characters with programs like 3ds Max, but it's not my desirable job position). I've worked professionally at a game development studio working on Age of Empires Online, and the designers there were actually critical. Basically, as a development studio gets larger in numbers of employees, the studio can tackle larger projects. The larger the studio, the larger their projects are. In order for this to work, each employee added to the company makes the employees of the company more and more specialized. In smaller studios, especially, indi developers, people can be a generalist; they can program, do art, design, production all at once. But in a highly specialized position, you do a more narrow set of jobs but you do them very very well. Designers are needed and in my opinion especially critical for larger projects. There are different sections of game design, however. At GPG (gas powered games) I worked mostly with a single designer focused on Player vs Player experience - we balanced the multiplayer game. There were other level designers, lead designers, designers that work for the publisher as a liaison, and concept artists (which sorta spill into design). So to answer your question honestly, I feel that there is a strong need in the industry for highly skilled and valuable designers, but there is a lot less demand for entry-level design positions. Because of this designers here at DigiPen study design alongside with something else. Here you can be a designer with a heavy programming background, or heavy art-focused background. It's sort of funny, the CS focused design degree here is basically identical to the dedicated CS degree for the first year. This makes you more versatile and competent as a designer overall. Hope that helps! Didn't seem like it when you talked on skype half the time at work and wrote guides there. (L) Randy~ LOL hey I got my own opinions I share in the chat, and they aren't really... Erm... Good to say in public
On November 17 2011 05:46 wattabeast wrote: This might sound silly but what does one have to do to become a game designer? Design games! There's a good podcast on the DigiPen site about what it's like being and how to become a game designer.
|
|
|
|