|
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.
|
Great blog!
I'm a senior CS student here in Holland and we don't get C at all during college. It's heavily focused on Java which makes the transition from Java to C quite frustrating as a beginner.
I've been programming for over a year in Objective-C for the iOS apps (for my brother's work) and I like it very much (besides the memory management in C :D:D:D).
Recently I've been looking to expand my horizon by looking how games are being programmed and it made my curiosity even bigger than before. I really like it to make the music/designs/stories by yourself but most of all the programming.
It's a lot of work since I'm reading multiple books at the same time to learn more about the different aspects of making games.
I can only tell to anybody who is aspiring to become a game designer (programming side) that you just have to do it. Nothing is easy and neither is this
|
On November 17 2011 07:36 shannn wrote: I've been programming for over a year in Objective-C for the iOS apps (for my brother's work) and I like it very much (besides the memory management in C :D:D:D).
The memory management in Objective-C is very forgiving compared to that of C.
|
Just as a side note, if anyone in Australia is interested in video game programming, particularly high-school students about to finish, definitely check out Murdoch University's Games Technology major. It is extremely challenging, but very rewarding - a real no bullshit games major that you can double with computer science (this is what I'm about to graduate with). Most graduates go on to graphics/simulations programming, but if you wanted to move to somewhere with a real games industry, you'd be well prepared. No engines, no scripting (apart from your own, by interfacing between C++ and Luabind), just C, C++ and OpenGL, apart from one unit in which you use XNA and C#.
During my degree I've created 6 games-related projects, from small scale C/OpenGL demos in the early years, to fully featured game engines, games, and virtual environment simulations, as well as a Brood War AI using BWAPI! I've learnt not only about game programming and large-scale software engineering, but physics, game design, intelligent systems, linear algebra, and a bunch of other inter-disciplinary topics.
|
On November 17 2011 07:41 Lysenko wrote:Show nested quote +On November 17 2011 07:36 shannn wrote: I've been programming for over a year in Objective-C for the iOS apps (for my brother's work) and I like it very much (besides the memory management in C :D:D:D). The memory management in Objective-C is very forgiving compared to that of C. That sounds comforting
I don't really mind the memory management since it's quite good to learn and know how your objects take up memory and how they are being used.
My motto since I've been programming 5 years ago has just been: "Just do it ffs!"
|
On November 17 2011 07:57 shannn wrote:That sounds comforting
The good news is that there are very good automated code analysis tools these days that can help you identify memory management bugs. Of course, you'll be best off developing a coding style that ensures that you minimize those problems to begin with.
|
On November 17 2011 07:57 shannn wrote:Show nested quote +On November 17 2011 07:41 Lysenko wrote:On November 17 2011 07:36 shannn wrote: I've been programming for over a year in Objective-C for the iOS apps (for my brother's work) and I like it very much (besides the memory management in C :D:D:D). The memory management in Objective-C is very forgiving compared to that of C. That sounds comforting I don't really mind the memory management since it's quite good to learn and know how your objects take up memory and how they are being used. My motto since I've been programming 5 years ago has just been: "Just do it ffs!" I haven't had any trouble with memory leaks or anything at all yet, and memory management hasn't seemed to be much a tough topic at all. Perhaps one just needs a good resource to learn from, is all
|
On November 17 2011 08:29 CecilSunkure wrote:I haven't had any trouble with memory leaks or anything at all yet, and memory management hasn't seemed to be much a tough topic at all. Perhaps one just needs a good resource to learn from, is all
Writing multithreaded or otherwise asynchronous code massively amplifies the difficulty of handling memory management. It can help to have a really good model in mind for how to handle this, but sometimes it is just an extremely tough problem.
|
On November 17 2011 09:04 Lysenko wrote:Show nested quote +On November 17 2011 08:29 CecilSunkure wrote:I haven't had any trouble with memory leaks or anything at all yet, and memory management hasn't seemed to be much a tough topic at all. Perhaps one just needs a good resource to learn from, is all Writing multithreaded or otherwise asynchronous code massively amplifies the difficulty of handling memory management. It can help to have a really good model in mind for how to handle this, but sometimes it is just an extremely tough problem. Ah I see, I haven't done anything multi-threaded yet.
I've written the next post in the series, which is on writing colored text and images to the console's screen buffer: link.
|
Great article Cecil! I'll try it out sometimes.
|
Why aren't you in the Strategy section writing awesome guide's on how to pwn it up in the ladder??
|
On November 17 2011 13:42 ImDrizzt wrote: Why aren't you in the Strategy section writing awesome guide's on how to pwn it up in the ladder?? Busy with school yo
|
Do you have any articles that you can recommend on pointers and how you use them, why you use them, and what you use them for?
|
On November 20 2011 00:18 ArcticVanguard wrote: Do you have any articles that you can recommend on pointers and how you use them, why you use them, and what you use them for? Yeah I wrote a pretty long article on pointers here: http://cecilsunkure.blogspot.com/search/label/Pointers
Is this enough info? Let me know if you would want to know more, and I can probably write it as my next article
|
|
On November 20 2011 06:54 Inori wrote: Recently I keep hearing from various sources that game dev is worst position a programmer can go to in terms of work stress. You're forced to work hard for months, constantly doing overtime (even unpaid) because of deadlines and etc. Then you finish it, have a little party and the cycle begins again with next title.
Is this in any way true? Yeah at certain companies it's a real issue of over-working employees. There was a popular EA wives dispute where a large group banded together to protest against how EA was treating their husbands. I don't know all the details but you can easily google search the topic.
Where I worked it wasn't an issue really. One guy even had only 4 days a week of work during hardcore crunch time, and he was an integral designer, lol.
Afaik it's a known issue that's been progressively getting better.
|
Awesome blog. I had to learn a little bit of C programming last year for university and I was pretty good at whatever they were throwing at us. Unfortunately, I have forgotten most of it because I stopped practicing (no more assignments) but am willing to learn again. I have already bookmarked your blog and please know that if you happen to keep writing guides about anything related to C, I will be reading them. Thank you.
|
For those who want to start at a bit higher level, remember there's also always UDK and CryEngine 3 SDK's for you to use. http://udk.com/ http://mycryengine.com/
I personally use UDK myself so if you have questions about that i can probably answer some of them!
|
I never get why people always talk about wanting to do game development in any discussion about programming. There is so much else you can do. Network programming, POS solutions, Database programming, web-based stuff. While i've not written any full-fledged games for modern Windows OS versions, I have dabbled in graphics based programming, the pinnacle of which produced a screen saver where I ripped sprites from various Doom based games and had them fight on screen. I wrote my own alpha-blending code, movement code and effects code and while it was the most fun I've ever had writing code, Id never do it for a living. There is way more money in other types of projects, specifically any thing that requires a Database. Someone always wants a program to manage customers and pricing and all that stuff. The game industry is way too competitive and unless you lease an engine from someone and base your game on it, its incredibly time consuming when compared against other types of software programming.
Do it if you absolutely love it but don't expect to get riches from it.
TLDR; There are other awesome stuff you can do with programming skills besides games.
|
On November 20 2011 14:43 SarR wrote: I never get why people always talk about wanting to do game development in any discussion about programming. There is so much else you can do. Network programming, POS solutions, Database programming, web-based stuff.
Game development includes all of those. You can pick most types of specializations and find some kind of application in games if you really care to.
One thing worth keeping in mind is that the best programming jobs are those where one learns a great deal about the subject area of what one's software is used to do, and applies that. So, being a game developer is probably a better long-term career than just being a guy who knows web development, because you have to have deep knowledge outside the technical tools to get anywhere.
|
SarR: The reason that games come up so much is that they're so much more interesting to the casual beginner. Someone who's already got experience might find those things more interesting, but a beginner looks more at the finished product.
|
I'm going to start University (again?) next year and I'll be doing CS there, probably going on to do game design (unless I change my mind along the way which is like 99% possible). So I guess a thank you is in order.
Thank you.
You're such a great guy, bookmark'd your blog.
|
On November 20 2011 14:43 SarR wrote: I never get why people always talk about wanting to do game development in any discussion about programming. There is so much else you can do. Network programming, POS solutions, Database programming, web-based stuff. While i've not written any full-fledged games for modern Windows OS versions, I have dabbled in graphics based programming, the pinnacle of which produced a screen saver where I ripped sprites from various Doom based games and had them fight on screen. I wrote my own alpha-blending code, movement code and effects code and while it was the most fun I've ever had writing code, Id never do it for a living. There is way more money in other types of projects, specifically any thing that requires a Database. Someone always wants a program to manage customers and pricing and all that stuff. The game industry is way too competitive and unless you lease an engine from someone and base your game on it, its incredibly time consuming when compared against other types of software programming.
Do it if you absolutely love it but don't expect to get riches from it.
TLDR; There are other awesome stuff you can do with programming skills besides games. Programmings games is a whole lot of fun, especially if you want to start a small studio of your own in the future. Plus programming games includes like all those different topics you mentioned. If I find I don't like it I can go into any field I like.
On November 21 2011 02:42 youngminii wrote: I'm going to start University (again?) next year and I'll be doing CS there, probably going on to do game design (unless I change my mind along the way which is like 99% possible). So I guess a thank you is in order.
Thank you.
You're such a great guy, bookmark'd your blog. Inspiring! I wish you luck!
|
Hey, nice blog! Always nice to see people being passionate about programming, makes me feel less alone about this.
I just have two things I want to say about your recommandations:
1) Don' ever recommend Dev-C++ again. Ever. Your credibility suffers a lot from this statement. Would you recommend an old timer to someone who wants to learn to drive? xD 2) Don't start out by programming games(at least don't recommend it). Most people have problems understanding basic programming concepts, so starting out with just skipping them and go into the game dev stuff is ... not the best way. Remember: Game Programming is still programming, you can't learn how to program games without learning how to program first!
Also:
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.
If you want to work in the industry on a relatively low level(engine programming) you should go for C++. It is the actual standard, however, most game dev tools that these engine engineerers will create use C#, so it's also enough to "just" learn C# and it's highly likely that this will be the standard in the future for most game devs.
Also I agree with SarR: You can program games all you want, but if you are seriously into programming there are way more exciting things to do. If you're saying "I don't want to use premade stuff and actually code myself, but in the end just program games" learning how to program with a language like C++ might not be the best idea, things like XNA etc will do very well for you.
|
On November 22 2011 02:51 KeksX wrote: 2) Don't start out by programming games(at least don't recommend it). Most people have problems understanding basic programming concepts, so starting out with just skipping them and go into the game dev stuff is ... not the best way. Remember: Game Programming is still programming, you can't learn how to program games without learning how to program first! Right right, I have a lot of other content, I was just posting about the series detailing actually making a console game since it's a pretty cool topic. [/QUOTE]
On November 22 2011 02:51 KeksX wrote: If you want to work in the industry on a relatively low level(engine programming) you should go for C++. It is the actual standard, however, most game dev tools that these engine engineerers will create use C#, so it's also enough to "just" learn C# and it's highly likely that this will be the standard in the future for most game devs.
Yeah I tried to recommend C then into C++, so it was totally in the plan to specialize in C++.
|
On November 22 2011 08:18 CecilSunkure wrote: Right right, I have a lot of other content, I was just posting about the series detailing actually making a console game since it's a pretty cool topic.
I can't remember how many countless hours I spent on writing little games in the console :D It's really addictive .
Yeah I tried to recommend C then into C++, so it was totally in the plan to specialize in C++.
Great! I mean no offense to C, it's really a great and powerful tool, but in the gaming industry (or rather the media industry) C++ is way more comfortable to use.
Good luck on your journey, will totally check your blog out!
|
|
I'm currently studying CS at university. I am really interested in game design, but i'm always struggling with the idea because i'm not sure if the programming field for video games will be as fulfilling as I hope. With the program i'm in, if I work really hard i have the option of taking great jobs at big software companies, which would be much more financially stable.... but i'm much more passionate about games.... so I can't ever decide. My friends and I have fun making small phone games though which is a good way to get your feet wet i guess
|
Love it. I'm getting into game programming myself(Computer Science at Purdue) and I have to agree with the lack of good information out there.
I actually got started with DirectX since I didn't want to start at actual ground zero. I found this great guide on DirectX. So my hat's off to you on this great stuff.
Also I chuckled when you said that game developers were rich and unreachable....mainly because game programmers are actually considered really underpaid for the skill level required for their job. xD
|
I'm the owner of an independent game company. I love this thread and Cecil's approach to learning. I think starting off near the metal is a great way to go when learning to create games.
The insight I'd like to add to this picture is the power that fundamentals for math in 3 dimensions (or 2) and understanding of the graphics pipeline add to creating games. If you are interested in game programming I highly recommend picking up a copy of "Real time Rendering" and perhaps "Game Engine Architecture".
I'd also be happy to do my best to answer questions anyone has about the work game developers of all types do.
|
On December 02 2011 15:58 LXR wrote: struggling with the idea because i'm not sure if the programming field for video games will be as fulfilling as I hope.
Hi! in my experience it is as fulfilling as I hoped and more interesting than writing most types of applications. The best part of developing games is that the code you write is often very different on a day to day basis and uses your critical thinking skills frequently instead of you just needing to rehash something you've done before.
The danger is being taken advantage of by the industry and being paid less than you are worth. It is worth noting that the average salary of a game programmer in the US was around 80 000 in 2007, which is quite respectable, but about 25% less than what a comparably good programmer would make in the finance industry.
|
Anyone who does Java programming and is looking into programming games as a hobby, or possibly more seriously, I would recommend David Brackeen's Developing Games in Java. I bought a lot of books on game programming when I was younger and this was probably my favorite as it seemed the best balanced between technical details, easy approach, and practical application. C is a very strong language that is used in a lot of application, like programming a microwave, but it is not easily approachable for many people and is not very common in game programming from what I have heard. Java (and C# as some others have mentioned) are very common languages for indie games as they are common in mobile applications and are largely platform independent. (I'm not so sure about C# since I have never used it personally) I was told once that the Unreal Engine uses C# and is the most commonly used game engine out there.
Cool blog though, I'll probably browse through some of the linked materials and duplicate some old fashioned DOS style games just for giggles. Right now though I'm told I should be focusing on mastering Assembly so that I can pass my compiler class whenever I take it. It's one of those courses that you always hear stories about 30+ people starting the class and less than 5 passing every semester.
|
It's seriously cool that you're studying at DigiPen. I have a friend who is working on 3d-modeling and CGI there, and from what he was saying it is a seriously difficult school. Mad props to anyone who can get through Art 101.
|
Very nice. I've been looking at Game Deisgning as a possible university course at DigiPen Singapore but i never really knew how to start. I've been trying to learn some C programming but i couldn't find relevent resources.
This is a really big help haha, going to bookmark your blog :D
|
When I was younger, I used a program called GameMaker (it's in its 8th version I think). I'm not a computer science major, so anyone who isn't totally dedicated to making games but would still like to make simple games could try that program out. Its language is similar to C++, I hear.
|
On December 02 2011 16:26 iplayBANJO wrote: Java (and C# as some others have mentioned) are very common languages for indie games as they are common in mobile applications and are largely platform independent. (I'm not so sure about C# since I have never used it personally) I was told once that the Unreal Engine uses C# and is the most commonly used game engine out there.
Hi, just want to respond to a few of these misconceptions. Java is extremely uncommon in game development because of the garbage collector, memory usage, startup times and graphics library bindings available. Of recent times the only significant game I can think of made with Java is Minecraft.
C/C++ is the main language of virtually all the important part (read: parts that need to run fast) of game engines or games out there. Many engines implement a scripting layer on top of the engine that might be in Lua (example Homeworld) or C# (example Unity3D) or Unrealscript or Actionscript (Flash), for instance.
Last note: Unreal engine is probably not even close to the most common game engine out there! Think Adobe Flash first, maybe Unreal competes at the highest quality of game for most common, but it is probably only used in something between 10-15 games a year (which I think is a generous estimate), while something like Unity3D might have shipped in 100 - 500 range and Flash something like 10 000 games.
|
Hm I'm taking the first "real" programming class in my school. First half of quarter is going over all of C, second half is a mix of assembly (we're using IA-32), ELF structures and the stack/heap. Loved the C, hating the assembly. I'm guessing for me personally C is the lowest level I can go without losing my passion (lol). I'm wondering if you guys deal with that in game programming?
|
I actually am doing the same thing you are doing right now (going to school for game dev) and I am currently working with c++ mainly doing opengl programming. We have to create our own actual models and read/load/render them ourselves. I would like to say, unless you are really good at math, the programming part of game dev is not for you.
I can completely understand why you are busy too... I have a game demo to finish in 3 days.
|
Some very important parts of some very fast engines use some assembly in the inner most loops. Some graphics card programs "shaders" also use assembly like code for certain speed ups, but for the most part, not something most game programmers see.
|
I make games all the time :D
Few month ago i made a Minecraft Clone that runs in a CAVE, which is basically multiple 3d Screens. It was awesome. Also made a Star Fox 4 Player Battle Clone, that is controlled with Kinect.
These were University Projects, and i got the best grades for it :D
Making Games is fun :D Though i often lack the ideas to create something of my own
|
"Have you ever wanted to program video games, either as a hobby or profession? " As Stephen King has said - If you want to be a writer, write, dammit! ( loosely quoted)
So, if you want to be a game developer, pick an idea and start coding /working, dammit! The same applies for the others areas - artist, designers, etc. etc. Let me elaborate - we are living in an age, where all the information and tools, that you need for you to make games are readily available or if you in the mood, there are enough open source projects, you can join. Right now, I'm working on my own sandbox rpg (using XNA) and I had some patches sent to VCMI - recreation of the HOMM3 engine. So, if you want to make games, sit on your butt and make games. Great blog, please add gamasutra to your links, there is lot of information there. E..g I learned how to implement the bloom effect from an article posted there.
|
I went into programming, and was in the games industry for a whopping 18 months. My advice personally to anyone wanting to become a "game designer" is... to stop. Most games DESIGN degrees are actually a sham, and are not teaching the skills that games development studios actually want - make sure your degree course is not one of those. And do you actually know what a game DESIGN job is?
How does the menu flow work? What menus will there be? What button presses do what? What button hints will we show on the screen? What happens when we press those buttons? What happens if he presses different buttons? What help text should we display? When should that help text appear? Will that help text have a delay in appearing? How big should that delay be? Will that help text work ok in different languages? Are any of the game UI elements too close to the edge of the screen? (nintendo enforced)
Game DESIGN involves solving ALL those questions, and thousands and thousands more, and extensively documenting it. You don't do the art - the art is done by artists. You don't actually make it happen, as that is done by the programmers. You don't think of and make the cool sounds or music, as that is done by the music guys. Your job is to write a document. Every_SINGLE_DETAIL of how EVERYTHING works must be documented exactly. That is what game design is. Very little of it is thinking up what cool weapons you use etc. In fact, you'll be lucky if you have much choice in the matter - a lot of the time you'll be designing a game that fits what the publisher needs/wants (the publisher is the company funding the work on your game), and you will have a strict budget you need to stick to (cool ideas usually take time (and therefore money) to implement).
I would also warn that I don't think you'll ever get a job out of university with a game 'designer' degree. Very small indie games companies require someone else already in the team (a programmer/artist) to take on the responsibilities of that role - they can't afford to pay someone just to design. Big companies have the money to hire someone with proven skill and experience, OR they can take someone from their team that they know and trust and have them do the role instead. Why would you hire someone fresh out of university, with no experience or proven track record to do one of the most important jobs?
If you want in the games industry, don't aim for games design. Do music, or art, or programming (incidentally, do C++, not C). You can move onto games designer later after you've gained experience in the industry.
On November 20 2011 06:54 Inori wrote: Recently I keep hearing from various sources that game dev is worst position a programmer can go to in terms of work stress. You're forced to work hard for months, constantly doing overtime (even unpaid) because of deadlines and etc. Then you finish it, have a little party and the cycle begins again with next title.
Is this in any way true? Yes. Overtime is almost always unpaid, and it is expected. It is not constant, but you WILL have to do overtime. At my job I did 4 weeks where I was in the office will 9 - 10pm at night, and I didn't see a penny of extra cash. You are constantly working towards the next deadline, and often it is a pretty intense working environment.
I don't intend to dissuade people TOO much - there IS still fun to be had. But, realistically, only go into it if you absolutely adore MAKING games (making is very different from playing), and you intend to put in the work required. Only the most dedicated are going to actually make it into the industry, and only the most passionate of those are going to stay there. The games industry is incredibly competitive, so you need to be fantastic. Go and learn some programming like in the opening post in your free time. Go and learn MORE programming. Do projects off your own back, in your own time. If this is sounding too much like hard work... it probably is. Because there are people out there who have the passion to spend almost all of their free time just programming, improving their craft, and practicing to get better. If you can't be at least as good as them you're going to find it difficult.
Become a hobbyist game programmer, and if you still ADORE it then go for it. If you just like games, and think working on games will be cool... you need to rethink.
|
On December 02 2011 17:16 Hairy wrote:I went into programming, and was in the games industry for a whopping 18 months. My advice personally to anyone wanting to become a "game designer" is... to stop. Most games DESIGN degrees are actually a sham, and are not teaching the skills that games development studios actually want - make sure your degree course is not one of those. And do you actually know what a game DESIGN job is? How does the menu flow work? What menus will there be? What button presses do what? What button hints will we show on the screen? What happens when we press those buttons? What happens if he presses different buttons? What help text should we display? When should that help text appear? Will that help text have a delay in appearing? How big should that delay be? Will that help text work ok in different languages? Are any of the game UI elements too close to the edge of the screen? (nintendo enforced) Game DESIGN involves solving ALL those questions, and thousands and thousands more, and extensively documenting it. You don't do the art - the art is done by artists. You don't actually make it happen, as that is done by the programmers. You don't think of and make the cool sounds or music, as that is done by the music guys. Your job is to write a document. Every_SINGLE_DETAIL of how EVERYTHING works must be documented exactly. That is what game design is. Very little of it is thinking up what cool weapons you use etc. In fact, you'll be lucky if you have much choice in the matter - a lot of the time you'll be designing a game that fits what the publisher needs/wants (the publisher is the company funding the work on your game), and you will have a strict budget you need to stick to (cool ideas usually take time (and therefore money) to implement). I would also warn that I don't think you'll ever get a job out of university with a game 'designer' degree. Very small indie games companies require someone else already in the team (a programmer/artist) to take on the responsibilities of that role - they can't afford to pay someone just to design. Big companies have the money to hire someone with proven skill and experience, OR they can take someone from their team that they know and trust and have them do the role instead. Why would you hire someone fresh out of university, with no experience or proven track record to do one of the most important jobs? If you want in the games industry, don't aim for games design. Do music, or art, or programming (incidentally, do C++, not C). You can move onto games designer later after you've gained experience in the industry. Show nested quote +On November 20 2011 06:54 Inori wrote: Recently I keep hearing from various sources that game dev is worst position a programmer can go to in terms of work stress. You're forced to work hard for months, constantly doing overtime (even unpaid) because of deadlines and etc. Then you finish it, have a little party and the cycle begins again with next title.
Is this in any way true? Yes. Overtime is almost always unpaid, and it is expected. It is not constant, but you WILL have to do overtime. At my job I did 4 weeks where I was in the office will 9 - 10pm at night, and I didn't see a penny of extra cash. You are constantly working towards the next deadline, and often it is a pretty intense working environment. I don't intend to dissuade people TOO much - there IS still fun to be had. But, realistically, only go into it if you absolutely adore MAKING games (making is very different from playing), and you intend to put in the work required. Only the most dedicated are going to actually make it into the industry, and only the most passionate of those are going to stay there. The games industry is incredibly competitive, so you need to be fantastic. Go and learn some programming like in the opening post in your free time. Go and learn MORE programming. Do projects off your own back, in your own time. If this is sounding too much like hard work... it probably is. Because there are people out there who have the passion to spend almost all of their free time just programming, improving their craft, and practicing to get better. If you can't be at least as good as them you're going to find it difficult. Become a hobbyist game programmer, and if you still ADORE it then go for it. If you just like games, and think working on games will be cool... you need to rethink.
Damn, this post is sobering. Just wondering, though, isn't unpaid overtime highly illegal?
|
On December 02 2011 17:26 leperphilliac wrote: Damn, this post is sobering. Just wondering, though, isn't unpaid overtime highly illegal?
It varies from place to place. The poster you quoted has a good warning about the sobering reality of trying to be only a game designer without a skill to bring to the table. Many salaried workers in many industries work unpaid overtime. In games it is even more common than most, but less than say a lawyer.
|
I would personally recommend people to learn SDL instead of working with ASCII in the console. It's actually extremely easy to learn and allows you to make far better looking games. SDL not only lets you work with "real" graphics easily, it also includes support for gamepads and joysticks, audio etc.
If you're good enough at C to program a proper game in the console, you can easily learn to do the same thing in SDL.
|
I like this blog post, except for the word hobbyist in the first sentence... (I actually opened the post after seeing it on the front page and hoping it had some insightful tips for me as a hobbyist.)
A beginner hobbyist game programmer should not bother learning C, it is not worth the time, and I'd be surprised to hear a professional recommend it (to a hobbyist) either. Better off focusing on learning a language/engine/SDK that has the tools and meets the requirements of whatever type of game you're trying to make.
Sure it may not exactly be "programming" in the eyes of professionals, but there is a big difference between wanting to be a professional game programmer, and wanting to make games as a hobby. You can (and have to) get your hands dirty with coding regardless of what language/engine/SDK you choose if you are going it alone.
6 years as a hobbyist programmer/game developer with the UT2k4 engine (unrealscript), Source engine(c++), Java, Actionscript and the UnrealEngine(unrealscript+actionscript) have taught me this. (oh, i should chuck in a brief stint with SourceMod, a serverside modification for the source engine with a custom scripting language too)
If I started by learning C, I wouldn't have had anywhere near the amount of experience I've had... That being said, I've never actually taken a project to completion (the most I could say I have created is a proof of concept), but that's what being a hobbyist is all about right? It's the journey, not the destination.
|
Writing games in the windows console can be fun, but I don't think it teaches you very much about how to do anything else. Knowing memory management is well and good, but modern coding is all about abstraction. I hardly think building a new game engine from scratch is common practice anywhere these days. Why reinvent the wheel when you can just build onto an existing, proven library?
As has been already said, game designing is a collaborative effort outside indie studios, and you generally have very little influence yourself. And if you want to make your game, you can't spend your time writing low level memory management code, you'll never see anything close to a finished product. Swallow your pride and use someone else's code, use an API or a finished engine. Your game doesn't need to be cutting edge, minecraft looks like shit but it's still a great game.
If you want to make a game and see some real results before you die, try Cocos2D. There are 3D APIs as well, but I haven't tried any.
On December 02 2011 17:59 skipgamer wrote: I like this blog post, except for the word hobbyist in the first sentence...
A beginner hobbyist game programmer should not bother learning C, it is not worth the time, and I'd be surprised to hear a professional recommend it either. Better off focusing on learning a language/engine/SDK that has the tools and meets the requirements of whatever type of game you're trying to make.
Sure it may not exactly be "programming" in the eyes of professionals, but there is a big difference between wanting to be a professional game programmer, and wanting to make games as a hobby. You can (and have to) get your hands dirty with coding regardless of what language/engine/SDK you choose if you are going it alone.
6 years as a hobbyist programmer/game developer with the UT2k4 engine (unrealscript), Source engine(c++), Java, Actionscript and the UnrealEngine(unrealscript+actionscript) have taught me this.
If I started by learning C, I wouldn't have had anywhere near the amount of experience I've had... That being said, I've never actually taken a project to completion (the most I could say I have created is a proof of concept), but that's what being a hobbyist is all about right? It's the journey, not the destination. Lol you beat me to it :p
|
I've been a programmer in the industry for 8 or 9 years now.
In my experience it's much easier to teach a good programmer to make games than to teach a typical game programmer to be a good programmer.
Focus less on the fact that you're making games and more on solid programming mechanics.
If you have any questions I'd be happy to answer.
Here are some resources to read/watch/follow. ___________________________________________________________________________________________________
The Free Lunch Is Over An article explaining why programs have stopped getting magically faster as new hardware becomes available and foreshadows much of the current developments in programming and computer technology.
Herb Sutter Machine Architecture Talk (Slides) Required viewing for serious developers regardless of language or platform.
Sutter’s Mill Herb Sutter's blog.
Andrew Koenig's Blog Andrew Koenig's blog.
XKCD A webcomic that every programmer should know about.
C++Next A blog about future directions of C++.
Standard Template Library Programmer's Guide The STL might be the greatest programming interface every designed.
Boost C++ Libraries Boost C++ Libraries are on par with the STL for the best thing since sliced bread.
Boost Mailing List Archive Following and reading the Boost developer mailing list will teach you more about C++ that any book, school, or single person ever could. Unless that person was Steven Watanabe, who posts frequently on the this list. Following this list will make you better not only at C++ but at everything programming related.
Effective Concurrency A series of articles by Herb Sutter explaining concurrency which is very very very important to modern high performance programming such as game development.
Real-Time Rendering Real-Time Rendering blog The definitive graphics programming book.
Design Patterns: Elements of Reusable Object-Oriented Software If I could only choose one book for a programmer that worked with me to know this would be it. The patterns and principles shown in this book are timeless and I use knowledge from this book daily. It's one of the few books I keep at my desk at all times.
Refactoring: Improving the Design of Existing Code If this book only had the code smells chapter it would be required reading for any serious developer. This book teaches you how to make your code better consistently and reliably.
The Pragmatic Programmer A good solid all-around book on best practices. It's also an easier read than most programming books.
Elements of Programming This book is quite hard to get through but it is written by the creator of the STL and is probably the most scientific and correct discussion of computer programming available. The C++Next blog has many entries dedicated to working through the chapters of this book.
Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development Known in my circle as simply the Larman book. It's huge and not the easiest read but understanding UML is one of the greatest tools you can have as a programmer for expressing yourself to others. Especially class diagrams and sequence diagrams.
Inside the C++ Object Model Everything that seems confusing or magic about C++ will become clear after reading this book. Understanding the C++ object model will help you to more readily understand other object models such as the Action Script object model used by Flash.
Exceptional C++ More Exceptional C++ Wonderful puzzles that teach great lessons about general programming, c++, error handling, memory management, inefficiency coding, etc.
Effective C++ More Effective C++ Effective STL The most practical and easy to digest "do this" / "don't do that" guides to good C++.
C++ Coding Standards: 101 Rules, Guidelines, and Best Practices Easy to digest great advice.
Beyond the C++ Standard Library: An Introduction to Boost This is a bit outdated but still a good beginners introduction to Boost and why it's great.
Michael Abrash's Graphics Programming Black Book As free downloads An old book but still very interesting. Many of the lessons learned here, especially about ways to approach tough problems, are applicable still today.
|
I would ask you why you learn game programming with C? What were the reasons given to you by Digipen? I always thought that C++ would be a significantly more powerful and expressive language for what you would want to do with a game. It doesn't even have performance drops compared to C and it boasts a lot of improvements upon the language.
One particular thing that bothers me is the debugging and error propagation techniques in C. I come from a Java background and am learning C++ rather intensively at the moment (should be doing final year CS work, but C++ is interesting... >_>) and I think that exceptions are a far better way to be handling errors than an if-else block with setjmp() and longjmp() calls.
Another question is why do you code your games in a console window? Aren't they rather limited in scope compared to a window created as part of a GUI?
|
On December 02 2011 18:36 Mirosuu wrote: Another question is why do you code your games in a console window? Aren't they rather limited in scope compared to a window created as part of a GUI?
I think that is the point
|
On December 02 2011 18:41 Ramuh wrote:Show nested quote +On December 02 2011 18:36 Mirosuu wrote: Another question is why do you code your games in a console window? Aren't they rather limited in scope compared to a window created as part of a GUI?
I think that is the point
Meh, disregard my post then. I'm just being an idiot.
|
Damn, I really loved reading this. I used to play a lot with the Warcraft 3 map editor and some other editors but mostly the Warcraft 3 one. And that really made me want to be a gamedesigner. So now I'm currently following a Gamedeveloper education at the Noorderpoort College in the Netherlands. It was a new education when I started and I'm currently in my 4th year. I started learning some of the basics in all area's. Some Flash, C# and 3D. And at the end of the first year I had to pick on of the three directions the OP had mentioned. We didnt have the Writers/Sound Engineers part strangely enough. And I decided to go for the programmer side. I liked working with 3D aswell but I always wanted to be able to program games.
I'm now so far along with my education that I'm mostly working with XNA and C# and making simple games for the Xbox 360. I cant even begin to describe how awesome it is now that I've come this far along. Here's an image of a game I made in about 6-7 weeks time. I know the background is ugly as hell but I'm a shitty artist and I had to make a background to show my teachers I knew how to do that.
I think its quite clear what kind of style I wanted the game to be
|
lol, i just started looking into these stuff yesterday, and you posted this today 0.o Thank you Cecil, starcraft and Final Fantasy ftw!!!!!!!!!!!!
|
Java all the way <3 just started learning to make android apps on my spare time, in addition to the regular stuff I make at Uni. Hoping to make me some decent app games in the future.
|
I actually haven't had much experience with computers before, I have only had my own computer for the last 3 years, and I went into animation because I wanted to animate computer games. But I admit to having a slight leaning towards wanting to learn to program, however my maths skills aren't amazing and the little bit of programming experience I got from doing 3D animation (a small amount of MEL scripting and Python) and I don't think it was really for me, it frazzled my brain a little -_- But this was a really interesting read, thank you for posting! I will just stick to the part of game making that I know, regardless of if I end up in that field or not
|
On December 02 2011 18:04 Osmoses wrote:Writing games in the windows console can be fun, but I don't think it teaches you very much about how to do anything else. Knowing memory management is well and good, but modern coding is all about abstraction. I hardly think building a new game engine from scratch is common practice anywhere these days. Why reinvent the wheel when you can just build onto an existing, proven library? As has been already said, game designing is a collaborative effort outside indie studios, and you generally have very little influence yourself. And if you want to make your game, you can't spend your time writing low level memory management code, you'll never see anything close to a finished product. Swallow your pride and use someone else's code, use an API or a finished engine. Your game doesn't need to be cutting edge, minecraft looks like shit but it's still a great game. If you want to make a game and see some real results before you die, try Cocos2D. There are 3D APIs as well, but I haven't tried any. Show nested quote +On December 02 2011 17:59 skipgamer wrote: I like this blog post, except for the word hobbyist in the first sentence...
A beginner hobbyist game programmer should not bother learning C, it is not worth the time, and I'd be surprised to hear a professional recommend it either. Better off focusing on learning a language/engine/SDK that has the tools and meets the requirements of whatever type of game you're trying to make.
Sure it may not exactly be "programming" in the eyes of professionals, but there is a big difference between wanting to be a professional game programmer, and wanting to make games as a hobby. You can (and have to) get your hands dirty with coding regardless of what language/engine/SDK you choose if you are going it alone.
6 years as a hobbyist programmer/game developer with the UT2k4 engine (unrealscript), Source engine(c++), Java, Actionscript and the UnrealEngine(unrealscript+actionscript) have taught me this.
If I started by learning C, I wouldn't have had anywhere near the amount of experience I've had... That being said, I've never actually taken a project to completion (the most I could say I have created is a proof of concept), but that's what being a hobbyist is all about right? It's the journey, not the destination. Lol you beat me to it :p
I am a professional programmer, and i have the complete opposite opinion. You have to start with the complete basic to get really good at something.
If you use flash+actionscript, or some other tool/API, yes you can have a lot if fun, and you will get faster to doing something.
But then you will hit a wall, where you want to do something that the tool does not easily provide. And by that point you will need the basic skills of programming, to extend the API you are using, instead of being limited by it.
I am not saying that you should not use some high level API, but eventually you need to get into really nasty technical details about some technology, if you have some need in your game, that are pushing the technology a bit.
That is why making simple games in ASCII art can improve your skills in programming a lot.
|
On December 02 2011 19:33 Calvin[Deck] wrote:Show nested quote +On December 02 2011 18:04 Osmoses wrote:Writing games in the windows console can be fun, but I don't think it teaches you very much about how to do anything else. Knowing memory management is well and good, but modern coding is all about abstraction. I hardly think building a new game engine from scratch is common practice anywhere these days. Why reinvent the wheel when you can just build onto an existing, proven library? As has been already said, game designing is a collaborative effort outside indie studios, and you generally have very little influence yourself. And if you want to make your game, you can't spend your time writing low level memory management code, you'll never see anything close to a finished product. Swallow your pride and use someone else's code, use an API or a finished engine. Your game doesn't need to be cutting edge, minecraft looks like shit but it's still a great game. If you want to make a game and see some real results before you die, try Cocos2D. There are 3D APIs as well, but I haven't tried any. On December 02 2011 17:59 skipgamer wrote: I like this blog post, except for the word hobbyist in the first sentence...
A beginner hobbyist game programmer should not bother learning C, it is not worth the time, and I'd be surprised to hear a professional recommend it either. Better off focusing on learning a language/engine/SDK that has the tools and meets the requirements of whatever type of game you're trying to make.
Sure it may not exactly be "programming" in the eyes of professionals, but there is a big difference between wanting to be a professional game programmer, and wanting to make games as a hobby. You can (and have to) get your hands dirty with coding regardless of what language/engine/SDK you choose if you are going it alone.
6 years as a hobbyist programmer/game developer with the UT2k4 engine (unrealscript), Source engine(c++), Java, Actionscript and the UnrealEngine(unrealscript+actionscript) have taught me this.
If I started by learning C, I wouldn't have had anywhere near the amount of experience I've had... That being said, I've never actually taken a project to completion (the most I could say I have created is a proof of concept), but that's what being a hobbyist is all about right? It's the journey, not the destination. Lol you beat me to it :p I am a professional programmer, and i have the complete opposite opinion. You have to start with the complete basic to get really good at something. If you use flash+actionscript, or some other tool/API, yes you can have a lot if fun, and you will get faster to doing something. But then you will hit a wall, where you want to do something that the tool does not easily provide. And by that point you will need the basic skills of programming, to extend the API you are using, instead of being limited by it. I am not saying that you should not use some high level API, but eventually you need to get into really nasty technical details about some technology, if you have some need in your game, that are pushing the technology a bit. That is why making simple games in ASCII art can improve your skills in programming a lot. While it's true that using extremely top-level stuff will leave you wanting eventually, I disagree that you have to start from the basics to remedy that. Say you're working with Flash and you're making a game. You make a game or two then come up with a great idea which you feel flash is inadequate for. That's the perfect time to go basic, you have experience making games in Flash, so you need to learn what you feel is appropriate.
I wouldn't expect someone to jump from making a flash game to making a C++ game, but I would think someone would have more motivation. Learning how to program is, at least IMO, not all that hard. Learning how to properly program a game, an enginge etc, is harder. If you know how to program in python, learning to program in C is not that bad and you will be motivated since you decided to learn C for a good reason, instead of motivating it by "it being basic".
I would personally recommend people to start using either C and SDL to make oldschool games were you have a ton of freedom, or XNA to make windows/xbox games. Both give you perfect freedom to make the games you want, yet give you the tools needed to not get stuck, such as audio and graphic frameworks.
|
On December 02 2011 19:33 Calvin[Deck] wrote:Show nested quote +On December 02 2011 18:04 Osmoses wrote:Writing games in the windows console can be fun, but I don't think it teaches you very much about how to do anything else. Knowing memory management is well and good, but modern coding is all about abstraction. I hardly think building a new game engine from scratch is common practice anywhere these days. Why reinvent the wheel when you can just build onto an existing, proven library? As has been already said, game designing is a collaborative effort outside indie studios, and you generally have very little influence yourself. And if you want to make your game, you can't spend your time writing low level memory management code, you'll never see anything close to a finished product. Swallow your pride and use someone else's code, use an API or a finished engine. Your game doesn't need to be cutting edge, minecraft looks like shit but it's still a great game. If you want to make a game and see some real results before you die, try Cocos2D. There are 3D APIs as well, but I haven't tried any. On December 02 2011 17:59 skipgamer wrote: I like this blog post, except for the word hobbyist in the first sentence...
A beginner hobbyist game programmer should not bother learning C, it is not worth the time, and I'd be surprised to hear a professional recommend it either. Better off focusing on learning a language/engine/SDK that has the tools and meets the requirements of whatever type of game you're trying to make.
Sure it may not exactly be "programming" in the eyes of professionals, but there is a big difference between wanting to be a professional game programmer, and wanting to make games as a hobby. You can (and have to) get your hands dirty with coding regardless of what language/engine/SDK you choose if you are going it alone.
6 years as a hobbyist programmer/game developer with the UT2k4 engine (unrealscript), Source engine(c++), Java, Actionscript and the UnrealEngine(unrealscript+actionscript) have taught me this.
If I started by learning C, I wouldn't have had anywhere near the amount of experience I've had... That being said, I've never actually taken a project to completion (the most I could say I have created is a proof of concept), but that's what being a hobbyist is all about right? It's the journey, not the destination. Lol you beat me to it :p I am a professional programmer, and i have the complete opposite opinion. You have to start with the complete basic to get really good at something. If you use flash+actionscript, or some other tool/API, yes you can have a lot if fun, and you will get faster to doing something. But then you will hit a wall, where you want to do something that the tool does not easily provide. And by that point you will need the basic skills of programming, to extend the API you are using, instead of being limited by it. I am not saying that you should not use some high level API, but eventually you need to get into really nasty technical details about some technology, if you have some need in your game, that are pushing the technology a bit. That is why making simple games in ASCII art can improve your skills in programming a lot. I don't mean to disagree with you, I'm just interested, don't you think it's appropriate at that point, when you hit that wall, to go out and learn how to get past that wall?
edit: had a big long rant here but I deleted it, because it was just that.
|
When I make small games I find nothing more enjoyable than seeing my "engine" in action, doing what I created it for. Making a good game (albeit small and simple) for me comes from making the engine, knowing exactly my limitations and possibilities, and having the knowledge to further add functionality. Then I can worry about how the game itself will unfold, often I end up with a completely different game than I intended just because of how my engine turned out. I see this as a good thing.
|
On November 17 2011 05:56 Lysenko wrote:Show nested quote +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.
Really nice and intersting OP and it contained my personal joke of the day too
|
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!
guess you worked with Eric?^^ he is a cool dude
|
You can´t spell pro gamer without programmer (or is it the other way around perhaps).. Nice article, even for a noob like me!
|
Excellent blog.
For what it's worth, I've been programming games for a living since 1994, and I wholeheartedly endorse the approach described here. I prepared a similar series of exercises for my nephew when he expressed an interest in learning to code.
Some are recommending development platforms other than the ASCII console and C++, including high-level SDKs. Personally, I think it depends upon what you're trying to do.
Using Unrealscript or the free Cryengine SDK etc allows you to focus on content production. If what you have is a content-led idea for a game, particularly a first-person game, and can create or source the art you need, these platforms are excellent. What do I mean by content-led? Well, let's say you came up with the idea for Amnesia: The Dark Descent. The mechanics of that game are pretty much covered by the Unreal or Cryengine SDKs. What makes it different is the art, setting, story and such.
However, I would not particularly recommend these SDKs to a programming novice. They are certainly not aimed at the novice. They are powerful professional-grade tools aimed at experienced programmers, level designers and game artists (ie, development companies) who want to compete at a high level of production value but lack the resources to develop their own API. They are not there to be your friend or hold your hand.
A step down from there things start to get more interesting for newcomers. I've used C# to prototype some simple ideas at home, and I find it pitched at just the right level for someone who wants to cut their teeth on - for instance - a 2D platform game. You get nice simple wrappers for loading and rendering bitmaps, managing windows and input, and the sense of connection between the code you're writing and what's happening on the screen is strong and direct. This is fantastic if your idea is gameplay-led (eg innovative movement mechanics) or intentionally retro (16bit Zelda-style): you don't have to get your hands too dirty but at the same time there's more control (and more useful learning imo) than if you use a 'game creator' type suite.
But if you're just starting out as a coder, Cecil's approach is, in my opinion, hard to beat. Pasting characters directly to the window lets you forget about doodling and concentrate on fundamental principles like loops, functions, data structures and the like. Your development is iterated on a super-fast turnaround, and you'll find yourself bolting on more and more features as ideas occur to you. Got a little ascii man moving around the screen? How about making it scroll? How would you do that? How about adding monsters? Weapons? Pathfinding and other AI? Keys, doors, switches, items - maybe an editor to speed up content creation. The sky's the limit.
The important point here is not that you'll be advancing the frontiers of computer science by scrolling a level around in a window, but that you'll be nurturing the number one skill essential to development on any platform in any language: problem solving. I first learned to program in BBC BASIC. I learned 6502 assembler, then 68000 assembler, then C++ as the platforms I was developing for changed. I've dabbled in Javascript, PHP, C# - it really doesn't matter. The one constant has been the need to take a high-level conceptual problem and break it down into solvable chunks. Different languages support different solutions more or less elegantly, and I value the perspective upon problems learning new languages has given me, but being a programmer is, for me, about the way you think, not about what you type.
|
The reason I've chosen to focus on C is twofold: in the game industry 90% of video games are coded in C/C++. You might want to adjust that 90% of yours, or perhaps adjust your definition of game industry.
Perhaps 90%-ish of games that are boxed and are for purchase in your local store, but remember that the game industry is much, much more then that. The mobile game industry is booming, and web-games have been around for a while too. They usually use higher level languages such as Java/C# or Actionscript, and iOS games are frequently built in Obj-C.
In fact; i've been a professional game programmer for 3 years now, and i hardly know any C++, let alone objective C. But i still have collaborated on 3 titles that are currently available in the appstore. Since we use some amazing middleware (Unity) we can code comfy in our C# environment, even for Android and iOS.
In short i'd like to say that the game industry is much broader then what people think. Its not only the starcrafts, modern warfares and battlefields. Its also Doodle Jump, Dora the Explorer and Hello Kitty online.
|
Italy12246 Posts
Awesomeness! I have taken a couple of c++ classes in college (and i'm awful at it), so this was a really interesting read Good luck in programming games man!
|
On November 17 2011 06:47 fanta[Rn] wrote: 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...?
I did java at university and thought it was pointless because I wanted to do C but in the end I got a job as a Java Games Programmer. Missing function pointers the most to be honest. At least Java and C are fairly similar syntax wise anyway.
|
This is so weird. Only just yesterday I got the urge to program my own NES game, and after an hour or so of searching, I gave up already because I couldn't find a good resource for a beginner like myself. My original attempt at college was CPA (Comp. Programmer Analyst) but the stuff they were teaching me (although, probably necessary) was terribly unexciting and I dropped out. I wish I hadn't at this point but if you keep this blog going I think I may take a crack at teaching myself because I have a lot of simple ideas and I'd love to just create SOMETHING at this point, a labor of love so to speak.
|
Bisutopia19033 Posts
I'm a video game developer, woot! Great article, glad your trying to get more people interested. It's a wonderful field to be in. Anyone who needs help or has questions about getting started feel free to pm me.
Btw, this article reminded me of when I wrote my first Gameboy Advanced game which was, oh so much fun :/
|
On December 02 2011 22:41 AimlessAmoeba wrote: This is so weird. Only just yesterday I got the urge to program my own NES game, and after an hour or so of searching, I gave up already because I couldn't find a good resource for a beginner like myself. My original attempt at college was CPA (Comp. Programmer Analyst) but the stuff they were teaching me (although, probably necessary) was terribly unexciting and I dropped out. I wish I hadn't at this point but if you keep this blog going I think I may take a crack at teaching myself because I have a lot of simple ideas and I'd love to just create SOMETHING at this point, a labor of love so to speak. NES is probably pretty far from what a beginner should be doing. Going basic and starting with C is one thing, to program a NES you have to work with 6502 assembly which is a pure bitch in comparision. It's easy to believe that NES games should be pretty simple to make because of how simple they look, but since it's assembly and extremely limited by the hardware, it's quite a hard nut to crack.
|
On December 02 2011 23:47 Tobberoth wrote:Show nested quote +On December 02 2011 22:41 AimlessAmoeba wrote: This is so weird. Only just yesterday I got the urge to program my own NES game, and after an hour or so of searching, I gave up already because I couldn't find a good resource for a beginner like myself. My original attempt at college was CPA (Comp. Programmer Analyst) but the stuff they were teaching me (although, probably necessary) was terribly unexciting and I dropped out. I wish I hadn't at this point but if you keep this blog going I think I may take a crack at teaching myself because I have a lot of simple ideas and I'd love to just create SOMETHING at this point, a labor of love so to speak. NES is probably pretty far from what a beginner should be doing. Going basic and starting with C is one thing, to program a NES you have to work with 6502 assembly which is a pure bitch in comparision. It's easy to believe that NES games should be pretty simple to make because of how simple they look, but since it's assembly and extremely limited by the hardware, it's quite a hard nut to crack.
Looked at GB a while ago, even with a C compiler its unintuitive as shit, stupid sprite stuff
|
Katowice25012 Posts
I found a book on 6502 assembly in my dad's den over the summer, it seemed to bizarre I brought it with me when I moved to NY. Shit is confusing as fuck.
|
On December 02 2011 23:53 Ramuh wrote:Show nested quote +On December 02 2011 23:47 Tobberoth wrote:On December 02 2011 22:41 AimlessAmoeba wrote: This is so weird. Only just yesterday I got the urge to program my own NES game, and after an hour or so of searching, I gave up already because I couldn't find a good resource for a beginner like myself. My original attempt at college was CPA (Comp. Programmer Analyst) but the stuff they were teaching me (although, probably necessary) was terribly unexciting and I dropped out. I wish I hadn't at this point but if you keep this blog going I think I may take a crack at teaching myself because I have a lot of simple ideas and I'd love to just create SOMETHING at this point, a labor of love so to speak. NES is probably pretty far from what a beginner should be doing. Going basic and starting with C is one thing, to program a NES you have to work with 6502 assembly which is a pure bitch in comparision. It's easy to believe that NES games should be pretty simple to make because of how simple they look, but since it's assembly and extremely limited by the hardware, it's quite a hard nut to crack. Looked at GB a while ago, even with a C compiler its unintuitive as shit, stupid sprite stuff
Ah, well thank you for clearing that up - I was totally under that assumption, that the simplicity would make it the easiest to learn. Could I make something with like, a retro NESish look with C if I got enough experience with it?
|
I've been meaning to try and learn to program video games. But between gaming and college (computer science), I've never quite found the time to do it.
|
Can I suggest anyone who wants to work with graphics and C++ go look at http://irrlicht.sourceforge.net/
I'm a hobbyist programmer, this is my baby child:
http://irrlicht.sourceforge.net/forum/viewtopic.php?f=6&t=36040
I also have a message board (free hosting... but it goes down pretty often) at http://starempires.zxq.net
Irrlicht is a very high level graphics engine that's based on either DX9 or openGL. There are some twenty tutorials for newbies to understand the engine and some basic problem solving using c++. Also, the forums are incredibly helpful if you don't mind waiting a day or two for an answer.
Good luck everyone!
|
You'd figure with all these skillfull people on TL that we'd make our own starcraft game )))
|
On December 03 2011 00:12 heyoka wrote: I found a book on 6502 assembly in my dad's den over the summer, it seemed to bizarre I brought it with me when I moved to NY. Shit is confusing as fuck.
So that's what you've been reading instead of emails...
|
Thanks a lot dude, i want to learn game design after i finish 13th grade ^^ hope it gets me to companys like Blizzard eventually :D
|
On December 03 2011 00:51 shannn wrote:You'd figure with all these skillfull people on TL that we'd make our own starcraft game ))) Actually, making my own hobby clone version of BW / SC2 was something I've been thinking about doing for a while. It would have incredibly basic visuals (I'm a programmer, not an artist), and my own hand-crafted sound effects (though nothing is funnier than having a game using your own hand-crafted sound effects/voices). Undoubtedly the pathfinding would probably be just as bad as SC1 :D
Huge project though, but lots of fun. My issue with hobby projects like this is that I simply can't seem to find the time to get around to doing them. That and the 'getting started' phase with a new programming project is the absolute worst; I always end up saying "fuck it" and aborting the fetus before it's even begun to take shape.
|
Wow seems sweet. As an aspiring Australian sound engineer i would be more than willing to contribute whatever i can for this project PM me if u want more deets
|
On December 03 2011 01:31 Dyskrete wrote:Wow seems sweet. As an aspiring Australian sound engineer i would be more than willing to contribute whatever i can for this project PM me if u want more deets Thanks for the offer, but when/if I get my smeg together to start a big pet project like that it would be a long long time before I would even be at the stage where sound effects could happen
If you're interested in doing your own project it might be fun to do a total sound conversion for SC2? Should be completely possible using the current SC2 tools available afaik.
|
I'm reading this from my game dev class
Me and some classmates are working on a fun little co-op XBox game where you customize a little character (heavily themed on actors like Rambo and Morgan Freeman) and kill space pig-men.
Here's one of the earlier screenshots :D (all its really missing is the hud and players/updated artwork) + Show Spoiler +
Game developing is awesome, if your interested you should take a look into the field!
|
Surprised no one mentioned http://altdevblogaday.com/ yet. It has all sorts of articles on game devving (mainly technical). Some other good links: http://gamedev.stackexchange.com/ , http://www.stackoverflow.com (for general programming questions)
Jaeger nailed it imo, you should strive to become a good programmer rather than a good game programmer. Getting to work at some game development company itself is already quite the task as there's tons of competition. If you're a good programmer who knows his stuff you can probably always find a good/awesome job.
|
I really should dig out my old flash game I made in university, "Zombie Shooter". You play as a desperate man equipped only with an AK47 and a jetpack, who alone must face the evil hordes of zombies.
Zombies equipped with bazookas and jetpacks.
|
So, just as a little bit of a note, because I know a tiny bit about this kind of thing. For those of you who want to go into the artistic side of things, don't rely on a degree. Rely on passion. I currently have a bachelor's degree in Computer Animation, specializing in environment art, but have no passion for it. Because of this I was able to scrape by to getting a degree, but could not, cannot, and will not find a job relating to the field.
The absolute #1 thing that you need to understand when searching for a job in this field is that you need skill, passion, and a desire to get better before you can really even consider pushing forward. I was neither skilled nor passionate, but did have a desire to get better, and because of that I was able to pass my classes, but now have a very expensive and useless degree.
I stress, STRESS highly, that you think long and hard before going into a field of study like this.
Now, that being said, Cecil, you have a knack for being passionate about things. All things it seems, and I want to wish you a great deal of luck in your future endeavors. Thanks for what you've done for the community and I hope the karma hits you on the positive in the near future.
|
Noob Questions: What's the main difference between C++ and C? And if C++ is like the base of most games made nowadays, why should I learn C at all?
Also, what colleges do you recommend to a high school student looking to go into game programming?
|
On December 02 2011 18:04 Osmoses wrote:Writing games in the windows console can be fun, but I don't think it teaches you very much about how to do anything else. Knowing memory management is well and good, but modern coding is all about abstraction. I hardly think building a new game engine from scratch is common practice anywhere these days. Why reinvent the wheel when you can just build onto an existing, proven library? As has been already said, game designing is a collaborative effort outside indie studios, and you generally have very little influence yourself. And if you want to make your game, you can't spend your time writing low level memory management code, you'll never see anything close to a finished product. Swallow your pride and use someone else's code, use an API or a finished engine. Your game doesn't need to be cutting edge, minecraft looks like shit but it's still a great game. If you want to make a game and see some real results before you die, try Cocos2D. There are 3D APIs as well, but I haven't tried any. Show nested quote +On December 02 2011 17:59 skipgamer wrote: I like this blog post, except for the word hobbyist in the first sentence...
A beginner hobbyist game programmer should not bother learning C, it is not worth the time, and I'd be surprised to hear a professional recommend it either. Better off focusing on learning a language/engine/SDK that has the tools and meets the requirements of whatever type of game you're trying to make.
Sure it may not exactly be "programming" in the eyes of professionals, but there is a big difference between wanting to be a professional game programmer, and wanting to make games as a hobby. You can (and have to) get your hands dirty with coding regardless of what language/engine/SDK you choose if you are going it alone.
6 years as a hobbyist programmer/game developer with the UT2k4 engine (unrealscript), Source engine(c++), Java, Actionscript and the UnrealEngine(unrealscript+actionscript) have taught me this.
If I started by learning C, I wouldn't have had anywhere near the amount of experience I've had... That being said, I've never actually taken a project to completion (the most I could say I have created is a proof of concept), but that's what being a hobbyist is all about right? It's the journey, not the destination. Lol you beat me to it :p First off, I'm not really a hobbyist, so I can't write a post about using unreal engines, or other pre-made engines. So sure if you just want to make something content-driven as a hobby, you don't truly need to learn C. Though as a beginner you absolutely shouldn't shut doors to possibilities on yourself.
As for writing a game in C, it teaches you a lot of essentials needed to move onto C++, or any other language with a high degree of success. If you're serious about becoming a professional you're not going to be using code someone else wrote as your engine when you're listing your achievements and projects completed in your resume; if you want your job of choice you're going to want to be able to show people a game you constructed from scratch, in C++. Nothing will beat that. Anything else is taking the easy way out. Teams of a few people here at my school make entire production level games from scratch while taking a full course load in six months; you're being unrealistic in how you favor using pre-made engines over the creation of one yourself.
With that in mind this is an important note everyone should understand reading the blog: coding a a good sized game in C like described in my blog series will teach you fundamental C programming skills at a wonderfully rounded and thorough manner. This is essential if you aspire to become a lethally skilled programmer due to how learning C teaches you the limitations of C. If you learn the limitations of C you then learn how to make effective use of features in C++, thus being all the better as a programmer.
On December 02 2011 20:53 TBO 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! guess you worked with Eric?^^ he is a cool dude Haha he seemed nice, but he rarely ever showed his face in the room I was working in. I think he was afraid of us balance guys as one of my co-workers was really brash and harsh the very first meeting in which we met Eric.
On December 02 2011 22:04 Slaytilost wrote:Show nested quote +The reason I've chosen to focus on C is twofold: in the game industry 90% of video games are coded in C/C++. You might want to adjust that 90% of yours, or perhaps adjust your definition of game industry. Perhaps 90%-ish of games that are boxed and are for purchase in your local store, but remember that the game industry is much, much more then that. The mobile game industry is booming, and web-games have been around for a while too. They usually use higher level languages such as Java/C# or Actionscript, and iOS games are frequently built in Obj-C. In fact; i've been a professional game programmer for 3 years now, and i hardly know any C++, let alone objective C. But i still have collaborated on 3 titles that are currently available in the appstore. Since we use some amazing middleware (Unity) we can code comfy in our C# environment, even for Android and iOS. In short i'd like to say that the game industry is much broader then what people think. Its not only the starcrafts, modern warfares and battlefields. Its also Doodle Jump, Dora the Explorer and Hello Kitty online. I understand, but that's a pretty specialized area. You'd have immense trouble getting a job in a lot of other areas due to not knowing C++. Also the quote was actually loosely quoted from the podcast in the OP by one of the teachers here at DigiPen.
On December 03 2011 03:27 Frastic wrote: Noob Questions: What's the main difference between C++ and C? And if C++ is like the base of most games made nowadays, why should I learn C at all?
Also, what colleges do you recommend to a high school student looking to go into game programming?
As I just posted, it's because by learning C you learn how to effectively use C++. You can't really do this firsthand without starting in C. As for schools, listen to the podcast I posted in the OP. Both of your questions are answered there.
|
First person to quote this sentence (back on TL at the Lessons thread), and the one directly after it, will win a free one hour lesson! Additionally whoever is the 100th poster in this thread (cmon, we can get that many posts!) will win a free one hour lesson as well!
More than a lesson, I think i'd rather have a good old game dev to game dev chat
|
On December 03 2011 03:27 Frastic wrote: Noob Questions: What's the main difference between C++ and C? And if C++ is like the base of most games made nowadays, why should I learn C at all?
C is a procedural language, while C++ is a object oriented language. In addition to being object oriented, C++ has made re-usability of code a large focus recently with the addition of generic templates and the STL library.
C++ encompasses the entirety of C (as I understand it) and procedural C can be used within a C++ program, but the addition of several keywords make certain C functions unnecessary. Most notably the C functions revolving around memory allocation are much more difficult to use than the more simple C++ versions new and delete.
If you are looking to learn C and C++ on your own I would recommend the books C Primer Plus and C++ Primer Plus both written by Stephen Prata, and both far more easily understood than the books I used in school to learn the languages. I should note that while the C Primer Plus book is nearly twice as long as C++ Primer Plus, The more technical reference manuals for each language are actually opposite, with The C Programming Language, by Brian Kernaghan and Denis Ritchie, being almost a quarter of the size of The C++ Programming Language, by Bjarne Stroustrup.
|
By the way, im wondering why don't you use something like Microsoft Visual C++ to learn C++ coding instead of DevC++? I mean, dont get me wrong, i loved devc++, but i think Microsoft has such an awesome tool its not even worth digging into devcpp.
|
On December 02 2011 22:04 Slaytilost wrote:Show nested quote +The reason I've chosen to focus on C is twofold: in the game industry 90% of video games are coded in C/C++. You might want to adjust that 90% of yours, or perhaps adjust your definition of game industry. Perhaps 90%-ish of games that are boxed and are for purchase in your local store, but remember that the game industry is much, much more then that. The mobile game industry is booming, and web-games have been around for a while too. They usually use higher level languages such as Java/C# or Actionscript, and iOS games are frequently built in Obj-C. In fact; i've been a professional game programmer for 3 years now, and i hardly know any C++, let alone objective C. But i still have collaborated on 3 titles that are currently available in the appstore. Since we use some amazing middleware (Unity) we can code comfy in our C# environment, even for Android and iOS. In short i'd like to say that the game industry is much broader then what people think. Its not only the starcrafts, modern warfares and battlefields. Its also Doodle Jump, Dora the Explorer and Hello Kitty online.
Guess what language Unity is written in? Guess what language C# is a derivative of?
|
On December 03 2011 04:04 iplayBANJO wrote:Show nested quote +On December 03 2011 03:27 Frastic wrote: Noob Questions: What's the main difference between C++ and C? And if C++ is like the base of most games made nowadays, why should I learn C at all?
C is a procedural language, while C++ is a object oriented language. In addition to being object oriented, C++ has made re-usability of code a large focus recently with the addition of generic templates and the STL library.
To nit a little C++ is a multi-paradigm language that supports object-oriented, generic, functional, procedural, declarative, and modular, and meta-programming.
|
I actually love the ASCII style art of your game and Dwarf Fortress and similar things! I am actually a student at the University of Utah in their game design program as a CompSci major (U of U actually has second best game design program in the nation behind USC) and I'm learning ActionScript 3.0 right now and have a general knowledge of Java. Here is a screenshot for my final project I'm working on in Flash
It's going to be a sort of Dwarf Fortress/Minecraft/Terraria sort of game. It's not nearly finished right now but you get the idea.
I love designing games and I really hope to be a indie game designer when I graduate. Great blog! I will be coming back to this for sure as it would be great to start learning C in addition to Java and ActionScript 3.0
|
Markham's ASCII art is simply magnificent, superb!
|
On December 03 2011 04:05 Jaeger wrote:Show nested quote +On December 02 2011 22:04 Slaytilost wrote:The reason I've chosen to focus on C is twofold: in the game industry 90% of video games are coded in C/C++. You might want to adjust that 90% of yours, or perhaps adjust your definition of game industry. Perhaps 90%-ish of games that are boxed and are for purchase in your local store, but remember that the game industry is much, much more then that. The mobile game industry is booming, and web-games have been around for a while too. They usually use higher level languages such as Java/C# or Actionscript, and iOS games are frequently built in Obj-C. In fact; i've been a professional game programmer for 3 years now, and i hardly know any C++, let alone objective C. But i still have collaborated on 3 titles that are currently available in the appstore. Since we use some amazing middleware (Unity) we can code comfy in our C# environment, even for Android and iOS. In short i'd like to say that the game industry is much broader then what people think. Its not only the starcrafts, modern warfares and battlefields. Its also Doodle Jump, Dora the Explorer and Hello Kitty online. Guess what language Unity is written in? Guess what language C# is a derivative of?
How on earth is that relevant? He's talking about areas where you don't need to know C++ specifically, which now is the majority of game development. Knowing C++ is great and all and it's good to have on a resume and so on, but if you want to work on actual gameplay development these days, even at the largest of studios, it's going to be in an interpreted language. It's also ridiculous how much people confuse knowing C++ with knowing how computers and the current crop of OOP programming languages work, if you know C# well enough to have dealt with multithreading and managing the garbage collector, you'll be able to pick C++ very quickly anyway. The hardest things about C++ as a language are unrelated to the language itself anyway, it's stuff like linking and makefiles and dependencies and sometimes having less functionality from the STL than you might expect.
If you can competently do the job you're applying to and demonstrate that through your portfolio and thus demonstrate an ability to learn new subjects, whether you can write the software that you write your software in is irrelevant.
edit: I also totally disagree with the whole "you must know C to understand C++" tripe, C++ is a superset of C so if you know C++ you know C, if you really think removing features and using malloc instead of new is the important part of programming in a lower-level language than interpreted ones, you're really missing the point. By this logic you should learn X86 ASM first so you'll understand how C allocates memory and performs arithmetic, you don't need to know everything, that time is far better spent learning your chosen area of expertise anyway.
|
On December 03 2011 04:22 Fandango wrote:Show nested quote +On December 03 2011 04:05 Jaeger wrote:On December 02 2011 22:04 Slaytilost wrote:The reason I've chosen to focus on C is twofold: in the game industry 90% of video games are coded in C/C++. You might want to adjust that 90% of yours, or perhaps adjust your definition of game industry. Perhaps 90%-ish of games that are boxed and are for purchase in your local store, but remember that the game industry is much, much more then that. The mobile game industry is booming, and web-games have been around for a while too. They usually use higher level languages such as Java/C# or Actionscript, and iOS games are frequently built in Obj-C. In fact; i've been a professional game programmer for 3 years now, and i hardly know any C++, let alone objective C. But i still have collaborated on 3 titles that are currently available in the appstore. Since we use some amazing middleware (Unity) we can code comfy in our C# environment, even for Android and iOS. In short i'd like to say that the game industry is much broader then what people think. Its not only the starcrafts, modern warfares and battlefields. Its also Doodle Jump, Dora the Explorer and Hello Kitty online. Guess what language Unity is written in? Guess what language C# is a derivative of? How on earth is that relevant? He's talking about areas where you don't need to know C++ specifically, which now is the majority of game development. Knowing C++ is great and all and it's good to have on a resume and so on, but if you want to work on actual gameplay development these days, even at the largest of studios, it's going to be in an interpreted language. It's also ridiculous how much people confuse knowing C++ with knowing how computers and the current crop of OOP programming languages work, if you know C# well enough to have dealt with multithreading and managing the garbage collector, you'll be able to pick C++ very quickly anyway. The hardest things about C++ as a language are unrelated to the language itself anyway, it's stuff like linking and makefiles and dependencies and sometimes having less functionality from the STL than you might expect. If you can competently do the job you're applying to and demonstrate that through your portfolio and thus demonstrate an ability to learn new subjects, whether you can write the software that you write your software in is irrelevant. edit: I also totally disagree with the whole "you must know C to understand C++" tripe, C++ is a superset of C so if you know C++ you know C, if you really think removing features and using malloc instead of new is the important part of programming in a lower-level language than interpreted ones, you're really missing the point. By this logic you should learn X86 ASM first so you'll understand how C allocates memory and performs arithmetic, you don't need to know everything, that time is far better spent learning your chosen area of expertise anyway. You actually do learn to code in Assembly here at DigiPen, in order to appreciate and understand C better. Then by extension, do the same with C to C++. It's fine if you disagree, though you're argument is kinda lacking against mine.
On December 03 2011 04:05 iPAndi wrote: By the way, im wondering why don't you use something like Microsoft Visual C++ to learn C++ coding instead of DevC++? I mean, dont get me wrong, i loved devc++, but i think Microsoft has such an awesome tool its not even worth digging into devcpp. Yeah I definitely think VS is much better, but you gotta remember the target audience of that article; people who know literally nothing about programming. Those people aren't going to want to go "buy" VS when there's a free tool much simpler to start off with. Also, that article isn't teaching C++, just some very basic C.
|
On December 03 2011 04:22 Fandango wrote:Show nested quote +On December 03 2011 04:05 Jaeger wrote:On December 02 2011 22:04 Slaytilost wrote:The reason I've chosen to focus on C is twofold: in the game industry 90% of video games are coded in C/C++. You might want to adjust that 90% of yours, or perhaps adjust your definition of game industry. Perhaps 90%-ish of games that are boxed and are for purchase in your local store, but remember that the game industry is much, much more then that. The mobile game industry is booming, and web-games have been around for a while too. They usually use higher level languages such as Java/C# or Actionscript, and iOS games are frequently built in Obj-C. In fact; i've been a professional game programmer for 3 years now, and i hardly know any C++, let alone objective C. But i still have collaborated on 3 titles that are currently available in the appstore. Since we use some amazing middleware (Unity) we can code comfy in our C# environment, even for Android and iOS. In short i'd like to say that the game industry is much broader then what people think. Its not only the starcrafts, modern warfares and battlefields. Its also Doodle Jump, Dora the Explorer and Hello Kitty online. Guess what language Unity is written in? Guess what language C# is a derivative of? How on earth is that relevant? He's talking about areas where you don't need to know C++ specifically, which now is the majority of game development. Knowing C++ is great and all and it's good to have on a resume and so on, but if you want to work on actual gameplay development these days, even at the largest of studios, it's going to be in an interpreted language. It's also ridiculous how much people confuse knowing C++ with knowing how computers and the current crop of OOP programming languages work, if you know C# well enough to have dealt with multithreading and managing the garbage collector, you'll be able to pick C++ very quickly anyway. The hardest things about C++ as a language are unrelated to the language itself anyway, it's stuff like linking and makefiles and dependencies and sometimes having less functionality from the STL than you might expect. If you can competently do the job you're applying to and demonstrate that through your portfolio and thus demonstrate an ability to learn new subjects, whether you can write the software that you write your software in is irrelevant. edit: I also totally disagree with the whole "you must know C to understand C++" tripe, C++ is a superset of C so if you know C++ you know C, if you really think removing features and using malloc instead of new is the important part of programming in a lower-level language than interpreted ones, you're really missing the point. By this logic you should learn X86 ASM first so you'll understand how C allocates memory and performs arithmetic, you don't need to know everything, that time is far better spent learning your chosen area of expertise anyway.
The implication is that you don't need to learn C/C++ to be a good game programmer. At my job we work in C C++ C# PHP Javascript AS3 and more regularly. If you don't know C++ you're going to limit yourself greatly.
In my experience coding gameplay in interpreted languages is done by designers that know scripting not programmers.
And yes you should learn assembly and if you're working in C# you should learn IL as well.
P.S. On Rage we wrote our gameplay logic in C++.
On December 03 2011 05:46 CecilSunkure wrote:Show nested quote +On December 03 2011 04:05 iPAndi wrote: By the way, im wondering why don't you use something like Microsoft Visual C++ to learn C++ coding instead of DevC++? I mean, dont get me wrong, i loved devc++, but i think Microsoft has such an awesome tool its not even worth digging into devcpp. Yeah I definitely think VS is much better, but you gotta remember the target audience of that article; people who know literally nothing about programming. Those people aren't going to want to go "buy" VS when there's a free tool much simpler to start off with. Also, that article isn't teaching C++, just some very basic C.
FWIW Visual C++ express is free.
|
On December 03 2011 05:57 Jaeger wrote:FWIW Visual C++ express is free. Oh I didn't realize. Only thing used here at my school is VS 2010 professional atm. Maybe I can get some time to re-write that section to include the use of it
|
On December 03 2011 05:57 Jaeger wrote:Show nested quote +On December 03 2011 04:22 Fandango wrote:On December 03 2011 04:05 Jaeger wrote:On December 02 2011 22:04 Slaytilost wrote:The reason I've chosen to focus on C is twofold: in the game industry 90% of video games are coded in C/C++. You might want to adjust that 90% of yours, or perhaps adjust your definition of game industry. Perhaps 90%-ish of games that are boxed and are for purchase in your local store, but remember that the game industry is much, much more then that. The mobile game industry is booming, and web-games have been around for a while too. They usually use higher level languages such as Java/C# or Actionscript, and iOS games are frequently built in Obj-C. In fact; i've been a professional game programmer for 3 years now, and i hardly know any C++, let alone objective C. But i still have collaborated on 3 titles that are currently available in the appstore. Since we use some amazing middleware (Unity) we can code comfy in our C# environment, even for Android and iOS. In short i'd like to say that the game industry is much broader then what people think. Its not only the starcrafts, modern warfares and battlefields. Its also Doodle Jump, Dora the Explorer and Hello Kitty online. Guess what language Unity is written in? Guess what language C# is a derivative of? How on earth is that relevant? He's talking about areas where you don't need to know C++ specifically, which now is the majority of game development. Knowing C++ is great and all and it's good to have on a resume and so on, but if you want to work on actual gameplay development these days, even at the largest of studios, it's going to be in an interpreted language. It's also ridiculous how much people confuse knowing C++ with knowing how computers and the current crop of OOP programming languages work, if you know C# well enough to have dealt with multithreading and managing the garbage collector, you'll be able to pick C++ very quickly anyway. The hardest things about C++ as a language are unrelated to the language itself anyway, it's stuff like linking and makefiles and dependencies and sometimes having less functionality from the STL than you might expect. If you can competently do the job you're applying to and demonstrate that through your portfolio and thus demonstrate an ability to learn new subjects, whether you can write the software that you write your software in is irrelevant. edit: I also totally disagree with the whole "you must know C to understand C++" tripe, C++ is a superset of C so if you know C++ you know C, if you really think removing features and using malloc instead of new is the important part of programming in a lower-level language than interpreted ones, you're really missing the point. By this logic you should learn X86 ASM first so you'll understand how C allocates memory and performs arithmetic, you don't need to know everything, that time is far better spent learning your chosen area of expertise anyway. The implication is that you don't need to learn C/C++ to be a good game programmer. At my job we work in C C++ C# PHP Javascript AS3 and more regularly. If you don't know C++ you're going to limit yourself greatly. In my experience coding gameplay in interpreted languages is done by designers that know scripting not programmers. And yes you should learn assembly and if you're working in C# you should learn IL as well. P.S. On Rage we wrote our gameplay logic in C++.
You're talking about big studio development, precisely the opposite of what I'm referencing and precisely where C++ is treasured. There a literally hundreds if not thousands of smaller studios now that create games in situations where you won't ever run into using C++ past some tiny exception like using flash Alchemy or Unity Pro plugins. These are game development positions just as much as working at Id is even if the prestige in your eyes is lower. Yes you're limiting yourself by not knowing C++, but it's not the C++ that's the hard part of learning C++ game development anyway, it's the specific APIs and shader languages, nearly everything else is language inspecific.
The only reason you'll ever need to know IL is if you're implementing an IL based language as a scripting language for a C++ base, which is not relevant to studios that use middleware that handles it anyway. And if you really honestly think that knowing how to program in assembly is a good idea for someone who wants to learn C so they can transitively learn C++ I just don't know what to say.
There's a weird cult of logic that comes from a surprisingly large amount of young games programmers where they have this idea of what's 'proper' and if your skills don't fit that mould you can't do anything in the industry and I think it's a result of the competitive nature of games jobs and especially CompSci and games programming specific university courses. You don't have to do it any specific way as long as you're capable of doing the job that you want and in the current industry (not the one of 10 years ago where a lot of the rigid approach comes from) a lot of them will never call on you to have extensive knowledge of half the things you suggest.
Not to mention the biggest skill in all of game development is the ability to learn new things quickly as need arises. There's a reason why 10-15 years ago most people were hired from completely unrelated fields too but that's a whole other kettle of fish.
|
On December 03 2011 05:46 CecilSunkure wrote: You actually do learn to code in Assembly here at DigiPen, in order to appreciate and understand C better. Then by extension, do the same with C to C++. It's fine if you disagree, though you're argument is kinda lacking against mine.
You haven't argued anything at all, you've literally just said that this is the way it is without any justification, I provided reasoning behind why that approach is flawed and you didn't refute any of it and again just assumed you're right. There's really no reason to continue to argue with you either because you seem to think you know everything about game development when you're still at college and apparently not that far along from your outlook. I'm not suggesting that my outlook is definitively the best or anything i'm just saying that your approach to learning is flawed because you don't really know what you're arguing.
|
To be a good programmer, you should understand assembly. It's very useful to know how the computer does what it does.
That being said, the compiler will very certainly be better at assembly than you are, and you don't need to be a good programmer to make games.
|
On December 03 2011 06:35 chocorush wrote: To be a good programmer, you should understand assembly. It's very useful to know how the computer does what it does.
That being said, the compiler will very certainly be better at assembly than you are, and you don't need to be a good programmer to make games.
You don't need to know a specific dialect of assembly to understand how the computer does what it does, you should know how a processor works with registers, program counters, the ALU and so on, but there's very little practical value to knowing X86 or ARM assembly these days unless you're working on something that's low level or incredible performance centric in which case you obviously should know it but that's a very small minority of game developers as a whole. Yall seem to be confusing general computer/performance/optimising knowledge with very specific niche technical knowledge, in my opinion.
edit: And a good programmer is the one who does whatever jobs he/she is given in as close to the best possible manner as is possible in the situation, it has absolutely nothing to do with what technical knowledge he/she has if they can do that.
|
On December 03 2011 06:32 Fandango wrote:Show nested quote +On December 03 2011 05:46 CecilSunkure wrote: You actually do learn to code in Assembly here at DigiPen, in order to appreciate and understand C better. Then by extension, do the same with C to C++. It's fine if you disagree, though you're argument is kinda lacking against mine.
You haven't argued anything at all, you've literally just said that this is the way it is without any justification, I provided reasoning behind why that approach is flawed and you didn't refute any of it and again just assumed you're right. There's really no reason to continue to argue with you either because you seem to think you know everything about game development when you're still at college and apparently not that far along from your outlook. I'm not suggesting that my outlook is definitively the best or anything i'm just saying that your approach to learning is flawed because you don't really know what you're arguing. Sorry I should clarify. By "mine" I meant what I've been taught here. I'm merely quoting people more experienced that me that tell me these things. For example the guy in the podcast in the OP, he's a huge proponent of the philosophy I've cited. I understand what you are saying and why you are saying it, but I just disagree since I trust these people here more than you. Sorry for being a bit unclear on "the argument", as again it isn't mine, just one I trust.
|
I've got a bachelor's in CS and have been working in software development for three years now. I do some kernel-mode and some user-mode system stuff - while I'm not on the bare-bones hardware like many of my colleagues, I'm closer than you would need to get for modern game development.
Don't worry about C. There are a lot of things that are bad about C and a lot of practices you'll pick up from starting in C that'll you'll need to unlearn when you move on to more mature languages. There's a reason we don't write software using the same tools that were used in the 1970's and that's because there are a lot of better tools out there today.
Skip C. It's not like a prerequisite, like C is your 101 level class that you have to take before the 102 of C++. It's not like C is arithmetic and C++ is calculus. It's not part of some progression you need to follow. C is different. It's old. There are a lot of ways to do C wrong and only a few ways to do it right. While there are some limited scenarios where it's the proper tool for the job, those are few and far between. And OOP is important. Start learning how to think that way now. When you're learning to be an architect, you don't start designing your first building to be built without hammers. Don't do the same when you're learning to be a developer.
C++ still gives you all the cool ways to shoot yourself in the foot and waste your weekends that C does. It has enough low-level power to prime you for that world but enough high-level expressiveness to get you used to working in that world as well. And if there ever comes a time when you need to fall back and learn C, your exposure to C++ is going to make that easy.
Sure there will be classes which require you to do some ASM and some C and whatever, and that's fine. It's good to have exposure. OCAML was cool to learn in school but fuck if I can even imagine what I'd do with it now. But on your personal projects, the stuff where you get to call the shots and where you get to really pour your heart and soul into it, don't take on this needless restriction of doing C first. For most purposes, C++ offers a *better* way to solve problems and one that your future employers are going to expect you to understand.
TL;DR: There are *drawbacks* to C. It's not a right of passage... in many cases, C is just wrong . Skip it!
|
On December 03 2011 06:48 CecilSunkure wrote:Show nested quote +On December 03 2011 06:32 Fandango wrote:On December 03 2011 05:46 CecilSunkure wrote: You actually do learn to code in Assembly here at DigiPen, in order to appreciate and understand C better. Then by extension, do the same with C to C++. It's fine if you disagree, though you're argument is kinda lacking against mine.
You haven't argued anything at all, you've literally just said that this is the way it is without any justification, I provided reasoning behind why that approach is flawed and you didn't refute any of it and again just assumed you're right. There's really no reason to continue to argue with you either because you seem to think you know everything about game development when you're still at college and apparently not that far along from your outlook. I'm not suggesting that my outlook is definitively the best or anything i'm just saying that your approach to learning is flawed because you don't really know what you're arguing. Sorry I should clarify. By "mine" I meant what I've been taught here. I'm merely quoting people more experienced that me that tell me these things. For example the guy in the podcast in the OP, he's a huge proponent of the philosophy I've cited. I understand what you are saying and why you are saying it, but I just disagree since I trust these people here more than you. Sorry for being a bit unclear on "the argument", as again it isn't mine, just one I trust.
You should be aware that he's only referring to the studios that stick to the old model of physical media and consoles releases and so on, what i'm referring to is the other side of the industry that makes web games, mobile games (including but not limited to iPhone/Android) and other contracted works where ultra high performance is needed. It's a whole different kettle of fish and there's even parts of big studios that focus on small projects that operate in the same manner and hire the same people. You should always be wary of anyone telling you that the industry is like this or this, it's almost always all of the above it's just whoever is saying it hasn't necessarily been exposed to that side of things.
I've worked at a big studio, ran a small studio that was based on contract work and been to quite a few developer conferences and depending on who you talk to, everyone is wrong and everyone is right. As a student you should just look what you want to do and go about doing that, for you it sounds like big studio development and you're on the right path for that so great. I'd also like to add that at no point am I condoning not learning anything you want to learn about just what is considered a requirement. Although i'd still skip C because it's not going to be relevant to anything but embedded systems programming and unless you want to work on robots or custom peripheral hardware it's probably a waste of time.
edit: Listen to the dude above too he's a cool cat
|
|
On December 03 2011 07:01 Fandango wrote:Show nested quote +On December 03 2011 06:48 CecilSunkure wrote:On December 03 2011 06:32 Fandango wrote:On December 03 2011 05:46 CecilSunkure wrote: You actually do learn to code in Assembly here at DigiPen, in order to appreciate and understand C better. Then by extension, do the same with C to C++. It's fine if you disagree, though you're argument is kinda lacking against mine.
You haven't argued anything at all, you've literally just said that this is the way it is without any justification, I provided reasoning behind why that approach is flawed and you didn't refute any of it and again just assumed you're right. There's really no reason to continue to argue with you either because you seem to think you know everything about game development when you're still at college and apparently not that far along from your outlook. I'm not suggesting that my outlook is definitively the best or anything i'm just saying that your approach to learning is flawed because you don't really know what you're arguing. Sorry I should clarify. By "mine" I meant what I've been taught here. I'm merely quoting people more experienced that me that tell me these things. For example the guy in the podcast in the OP, he's a huge proponent of the philosophy I've cited. I understand what you are saying and why you are saying it, but I just disagree since I trust these people here more than you. Sorry for being a bit unclear on "the argument", as again it isn't mine, just one I trust. You should be aware that he's only referring to the studios that stick to the old model of physical media and consoles releases and so on, what i'm referring to is the other side of the industry that makes web games, mobile games (including but not limited to iPhone/Android) and other contracted works where ultra high performance is needed. It's a whole different kettle of fish and there's even parts of big studios that focus on small projects that operate in the same manner and hire the same people. You should always be wary of anyone telling you that the industry is like this or this, it's almost always all of the above it's just whoever is saying it hasn't necessarily been exposed to that side of things. I've worked at a big studio, ran a small studio that was based on contract work and been to quite a few developer conferences and depending on who you talk to, everyone is wrong and everyone is right. As a student you should just look what you want to do and go about doing that, for you it sounds like big studio development and you're on the right path for that so great. I'd also like to add that at no point am I condoning not learning anything you want to learn about just what is considered a requirement. Although i'd still skip C because it's not going to be relevant to anything but embedded systems programming and unless you want to work on robots or custom peripheral hardware it's probably a waste of time. edit: Listen to the dude above too he's a cool cat Yeah I understand. In the podcast he even himself says that if you're just interested in Flash development that strong foundation in C/C++ isn't really necessary. Nothing was said on mobile development though. From people I've heard talk it sounds like heavy optimization is important in mobile development as well due to limited hardware power. It's just a matter of goals of the target audience.
|
On December 03 2011 07:27 CecilSunkure wrote:Show nested quote +On December 03 2011 07:01 Fandango wrote:On December 03 2011 06:48 CecilSunkure wrote:On December 03 2011 06:32 Fandango wrote:On December 03 2011 05:46 CecilSunkure wrote: You actually do learn to code in Assembly here at DigiPen, in order to appreciate and understand C better. Then by extension, do the same with C to C++. It's fine if you disagree, though you're argument is kinda lacking against mine.
You haven't argued anything at all, you've literally just said that this is the way it is without any justification, I provided reasoning behind why that approach is flawed and you didn't refute any of it and again just assumed you're right. There's really no reason to continue to argue with you either because you seem to think you know everything about game development when you're still at college and apparently not that far along from your outlook. I'm not suggesting that my outlook is definitively the best or anything i'm just saying that your approach to learning is flawed because you don't really know what you're arguing. Sorry I should clarify. By "mine" I meant what I've been taught here. I'm merely quoting people more experienced that me that tell me these things. For example the guy in the podcast in the OP, he's a huge proponent of the philosophy I've cited. I understand what you are saying and why you are saying it, but I just disagree since I trust these people here more than you. Sorry for being a bit unclear on "the argument", as again it isn't mine, just one I trust. You should be aware that he's only referring to the studios that stick to the old model of physical media and consoles releases and so on, what i'm referring to is the other side of the industry that makes web games, mobile games (including but not limited to iPhone/Android) and other contracted works where ultra high performance is needed. It's a whole different kettle of fish and there's even parts of big studios that focus on small projects that operate in the same manner and hire the same people. You should always be wary of anyone telling you that the industry is like this or this, it's almost always all of the above it's just whoever is saying it hasn't necessarily been exposed to that side of things. I've worked at a big studio, ran a small studio that was based on contract work and been to quite a few developer conferences and depending on who you talk to, everyone is wrong and everyone is right. As a student you should just look what you want to do and go about doing that, for you it sounds like big studio development and you're on the right path for that so great. I'd also like to add that at no point am I condoning not learning anything you want to learn about just what is considered a requirement. Although i'd still skip C because it's not going to be relevant to anything but embedded systems programming and unless you want to work on robots or custom peripheral hardware it's probably a waste of time. edit: Listen to the dude above too he's a cool cat Yeah I understand. In the podcast he even himself says that if you're just interested in Flash development that strong foundation in C/C++ isn't really necessary. Nothing was said on mobile development though. From people I've heard talk it sounds like heavy optimization is important in mobile development as well due to limited hardware power. It's just a matter of goals of the target audience.
Well the issue with mobile development for iPhone and Android (and I believe the old Samsung OS that failed), is that they don't allow you to program in C++ properly anyway, it's either Obj-C or Java. Optimising is far far far far far more down to code design than language speed anyway, compilers (including the JIT ones used in C# or Java) are very good at optimising these days. The biggest thing is always going to be how you've programmed it, removing unnecessary loops, avoiding costly operations and so on. Hardcore optimisations that rely on language speed differences or knowing how to use the different programming caches are like the last resort that rarely need to be done outside of engine development.
|
On December 03 2011 06:27 Fandango wrote: You're talking about big studio development, precisely the opposite of what I'm referencing and precisely where C++ is treasured.
On December 03 2011 04:22 Fandango wrote: Knowing C++ is great and all and it's good to have on a resume and so on, but if you want to work on actual gameplay development these days, even at the largest of studios, it's going to be in an interpreted language.
|
Yeah in retrospect that was a dumb thing to say, it's probably the majority of gameplay development these days but when UnrealScript is so poor compared to working with full source for UE, that's going to take up a lot of people so i'm not sure if that's true. There's definitely been a huge shift towards fast scripting languages for full engine middleware though, from Gamebryo (glad that's gone) to Unity to Blitztech and so on. It's not like the Id tech based approaches have done well in the last decade or so as middleware though, both Source and IdTech4 are really short on licensed titles. Plus if you were seriously doing the majority of gameplay programming in C++ I can't imagine how Rage ever got finished with all that compile time.
I mean you didn't address any of the other points though so I guess you agree with me on those?
|
Thank you so much for posting this
|
On December 02 2011 23:26 BisuDagger wrote: I'm a video game developer, woot! Great article, glad your trying to get more people interested. It's a wonderful field to be in. Anyone who needs help or has questions about getting started feel free to pm me.
Btw, this article reminded me of when I wrote my first Gameboy Advanced game which was, oh so much fun :/
Who let you out of your hole?
Also about the whole c/c++/c#/cwhatever argument, if you learn the lowest level it will help you greater to understand the higher levels. The curriculum at my school (Full Sail in Florida) starts off with the most basic things and slowly works its way up so that you learn the "hard" way and the "easy" or convenient way to do things.
For example, we learned how to store data in a fixed size array, then a dynamic array, then how to use the STL vector. Each getting progressively easier to use but the knowledge of the previous helps a lot.
With the array knowledge we were able to learn how to construct basic strings before learning the STL string class.
I would highly suggest starting as low as possible and working your way up.
|
I think that this is just a list of things that you like to do because you think you're good at programming, AKA you're showing off.
|
On December 03 2011 09:36 RayGay wrote: I think that this is just a list of things that you like to do because you think you're good at programming, AKA you're showing off. Then don't read it. No need to make a new account just to tell me that
|
On December 03 2011 08:28 Fandango wrote: Yeah in retrospect that was a dumb thing to say, it's probably the majority of gameplay development these days but when UnrealScript is so poor compared to working with full source for UE, that's going to take up a lot of people so i'm not sure if that's true. There's definitely been a huge shift towards fast scripting languages for full engine middleware though, from Gamebryo (glad that's gone) to Unity to Blitztech and so on. It's not like the Id tech based approaches have done well in the last decade or so as middleware though, both Source and IdTech4 are really short on licensed titles. Plus if you were seriously doing the majority of gameplay programming in C++ I can't imagine how Rage ever got finished with all that compile time.
I mean you didn't address any of the other points though so I guess you agree with me on those?
Not necessarily I mostly just have work to do so I have to pick my battles .
To address a few more of your points:
I will agree that the most important things are language agnostic. For example solid OO design, task driven parallelism, algorithms, data structures, agile process.
I will still contend that you need to have a solid understanding of what your code actually does. This includes having a solid understanding of the target machine architecture and at least a working understanding of any language your code is compiled down to (IL, x86, ARM, etc). Knowing what the high level code you're writing is actually doing is important even in high level garbage collected managed languages. And while you don't need to always think about what your code is doing at the hardware level, being able to do that analysis makes you a more valuable coder and will subconsciously lead you towards better design.
The ability to learn new things quickly is important but somewhat misleading. Really it's the ability to apply existing knowledge to new circumstances.
Compile time is not an issue if you architect your code properly. Make use of components in separately compiled libraries and compilation firewalls. In lieu of good architecture you can always just throw money at the problem and use IncrediBuild.
|
On December 03 2011 09:21 Phrost wrote: Also about the whole c/c++/c#/cwhatever argument, if you learn the lowest level it will help you greater to understand the higher levels. The curriculum at my school (Full Sail in Florida) starts off with the most basic things and slowly works its way up so that you learn the "hard" way and the "easy" or convenient way to do things.
For example, we learned how to store data in a fixed size array, then a dynamic array, then how to use the STL vector. Each getting progressively easier to use but the knowledge of the previous helps a lot.
That's always what bothered me about the CS major, which I am still working on. It seems like every time you struggle through some difficult class you're told at the end to not worry about how hard it was, you'll probably never have to do anything like that again. Then you move on to another class that ends with a similar process. It's kind of disheartening, especially since I love the C and assembly that I have done, and I feel like I thrive off of all the frustrating bit twiddling that I get sucked into all the time.
|
On December 03 2011 09:36 RayGay wrote: I think that this is just a list of things that you like to do because you think you're good at programming, AKA you're showing off.
... and you're doing what, here?
Irony: kind of like iron.
|
On December 03 2011 10:10 Jaeger wrote:Show nested quote +On December 03 2011 08:28 Fandango wrote: Yeah in retrospect that was a dumb thing to say, it's probably the majority of gameplay development these days but when UnrealScript is so poor compared to working with full source for UE, that's going to take up a lot of people so i'm not sure if that's true. There's definitely been a huge shift towards fast scripting languages for full engine middleware though, from Gamebryo (glad that's gone) to Unity to Blitztech and so on. It's not like the Id tech based approaches have done well in the last decade or so as middleware though, both Source and IdTech4 are really short on licensed titles. Plus if you were seriously doing the majority of gameplay programming in C++ I can't imagine how Rage ever got finished with all that compile time.
I mean you didn't address any of the other points though so I guess you agree with me on those? Not necessarily I mostly just have work to do so I have to pick my battles . To address a few more of your points: I will agree that the most important things are language agnostic. For example solid OO design, task driven parallelism, algorithms, data structures, agile process. I will still contend that you need to have a solid understanding of what your code actually does. This includes having a solid understanding of the target machine architecture and at least a working understanding of any language your code is compiled down to (IL, x86, ARM, etc). Knowing what the high level code you're writing is actually doing is important even in high level garbage collected managed languages. And while you don't need to always think about what your code is doing at the hardware level, being able to do that analysis makes you a more valuable coder and will subconsciously lead you towards better design. The ability to learn new things quickly is important but somewhat misleading. Really it's the ability to apply existing knowledge to new circumstances. Compile time is not an issue if you architect your code properly. Make use of components in separately compiled libraries and compilation firewalls. In lieu of good architecture you can always just throw money at the problem and use IncrediBuild.
My issue with the assembly/hardware architecture thing isn't that it isn't worthwhile or isn't valuable to know, it's that utility of that information when you're writing flash games or android games or really anything that's expected to run in a VM on a huge range of hardware setups is pretty minimal. Given the generally unspecialised nature of the work you'd be more efficient at what you do by learning how to do a wide range of game elements from physics engines to GUI systems to general good code architecture.
On the apply existing knowledge thing you're right that's a better way to put it and the above knowledge will certainly help with that. I keep wanting to say that C++ will inherently teach you most of the things you'll need to know but i'm wary since I did computer science so who knows what I take for granted.
|
Nice post, I actually just finished a 32 week diploma here at Media Design School in NZ that focused on game programming. I loved it, and would recommend the school to anyone in NZ or even in the general oceanic area that wants to do game dev stuff (either programming or art, you'll see why in a second), as the school is great. I'm actually going back next year to do the graduate diploma of game dev, where they mix programmers and artists together for some portions of the course, and all end up working together in teams a six month game project.
On my course, they assume you have no previous programming knowledge, and start teaching C++ from scratch. Our first assignment was actually a text based battleships. From there, we moved onto the Windows GDI and made some sprite games. Before we moved onto DirectX, they actually taught us how to do all the 3D maths, matrix transformations and projections etc manually, supposedly so we'd have a better understanding of the pipeline, but I have no idea if that helped.
We actually ended with an 8 week team project, where we designed and then built a 3D game from scratch. Our class ended up with a Wipeout clone(my team), a Plants vs Zombies clone, and a more traditional tower defense game.
For me personally, I'm definitly going to use the break to work on some stuff before going back. Given that alot of the studios locally here, both game and non-game seem to be mobile/web focused, going to be looking at creating a mobile game or two. Also plan on fixing our collision detection based assignment (a pool game!), as I screwed it up.
|
On December 03 2011 11:04 Fandango wrote:Show nested quote +On December 03 2011 10:10 Jaeger wrote:On December 03 2011 08:28 Fandango wrote: Yeah in retrospect that was a dumb thing to say, it's probably the majority of gameplay development these days but when UnrealScript is so poor compared to working with full source for UE, that's going to take up a lot of people so i'm not sure if that's true. There's definitely been a huge shift towards fast scripting languages for full engine middleware though, from Gamebryo (glad that's gone) to Unity to Blitztech and so on. It's not like the Id tech based approaches have done well in the last decade or so as middleware though, both Source and IdTech4 are really short on licensed titles. Plus if you were seriously doing the majority of gameplay programming in C++ I can't imagine how Rage ever got finished with all that compile time.
I mean you didn't address any of the other points though so I guess you agree with me on those? Not necessarily I mostly just have work to do so I have to pick my battles . To address a few more of your points: I will agree that the most important things are language agnostic. For example solid OO design, task driven parallelism, algorithms, data structures, agile process. I will still contend that you need to have a solid understanding of what your code actually does. This includes having a solid understanding of the target machine architecture and at least a working understanding of any language your code is compiled down to (IL, x86, ARM, etc). Knowing what the high level code you're writing is actually doing is important even in high level garbage collected managed languages. And while you don't need to always think about what your code is doing at the hardware level, being able to do that analysis makes you a more valuable coder and will subconsciously lead you towards better design. The ability to learn new things quickly is important but somewhat misleading. Really it's the ability to apply existing knowledge to new circumstances. Compile time is not an issue if you architect your code properly. Make use of components in separately compiled libraries and compilation firewalls. In lieu of good architecture you can always just throw money at the problem and use IncrediBuild. My issue with the assembly/hardware architecture thing isn't that it isn't worthwhile or isn't valuable to know, it's that utility of that information when you're writing flash games or android games or really anything that's expected to run in a VM on a huge range of hardware setups is pretty minimal. Given the generally unspecialised nature of the work you'd be more efficient at what you do by learning how to do a wide range of game elements from physics engines to GUI systems to general good code architecture. On the apply existing knowledge thing you're right that's a better way to put it and the above knowledge will certainly help with that. I keep wanting to say that C++ will inherently teach you most of the things you'll need to know but i'm wary since I did computer science so who knows what I take for granted.
FWIW I just finished working on a Flash game for facebook using AS3, PHP and Javascript and I'm currently working on an iOS game using C# in Unity so it's not like I don't have perspective on the kinds of projects you're talking about.
I find that knowledge valuable and very useful.
|
C++ is a terrible language (even compared to C), but it is absolutely necessary if you want to work for a large games studio.
Knowing C will hardly help when it comes to C++ either, it is completely different, only that C++ is backwards compatible with C, so you can write C and claim you are doing C++ . The only areas C will help is with learning basic programming concepts like functional decomposition and memory management, after that, everything is different.
Its also important that you know assembly language, as with working with huge games, it is vital for debugging.
I originally wanted to become a games programmer. Although I know C++ as well as a ton of other languages, I won't be doing games programming simply because I hate C++ . I worked on phone and facebook games for a while in Obj-C and Ruby (I love Ruby!) but everyone was really stressed out and I didn't like working there.
On December 03 2011 04:05 iPAndi wrote: By the way, im wondering why don't you use something like Microsoft Visual C++ to learn C++ coding instead of DevC++? I mean, dont get me wrong, i loved devc++, but i think Microsoft has such an awesome tool its not even worth digging into devcpp.
Windows is a terrible platform for doing Dev work. I love working on Linux, and its so easy and quick to set up and isolate dev environments. Mac is ok simply because of Bash, but apart from that, its still Windows as far as developing is concerned. I do all my dev work in Xmonad, I am 100x more productive in a tiling window manager, than a crappy point and click one.
|
On December 03 2011 11:48 sluggaslamoo wrote: Knowing C will hardly help when it comes to C++... it is completely different... The whole point of learning C, according to the professionals at my school, is that it is different from C++.
|
On December 03 2011 09:21 Phrost wrote:
Also about the whole c/c++/c#/cwhatever argument, if you learn the lowest level it will help you greater to understand the higher levels. The curriculum at my school (Full Sail in Florida) starts off with the most basic things and slowly works its way up so that you learn the "hard" way and the "easy" or convenient way to do things.
For example, we learned how to store data in a fixed size array, then a dynamic array, then how to use the STL vector. Each getting progressively easier to use but the knowledge of the previous helps a lot.
With the array knowledge we were able to learn how to construct basic strings before learning the STL string class.
I would highly suggest starting as low as possible and working your way up.
This is also relevant aside from a "useful to learn the later things" standpoint because each has its own advantages. There's a lot of knowledge that you get from programming from lower level languages that seems very theoretical and irrelevant at first but ends up being useful. From an "I want to fill a list of things" in a perfect world, you'll always just use the STL vector. But once you have real-world limitations (memory footprint, speed, flexibility, usability), you'll find that each approach is useful in its own right. Also you'll have the knowledge necessary to write your own version of the STL vector or dynamic array that fits a specific balance of performance vs. flexibility.
However you'll be looking at most of those differences just within the scope of C++ already, so while I might suggest learning assembly and C in a world where you have infinite time, I would suggest just skipping to C++.
|
On December 03 2011 06:56 Bey wrote: Don't worry about C. There are a lot of things that are bad about C and a lot of practices you'll pick up from starting in C that'll you'll need to unlearn when you move on to more mature languages. There's a reason we don't write software using the same tools that were used in the 1970's and that's because there are a lot of better tools out there today.
Skip C. It's not like a prerequisite, like C is your 101 level class that you have to take before the 102 of C++. It's not like C is arithmetic and C++ is calculus. It's not part of some progression you need to follow. C is different. It's old. There are a lot of ways to do C wrong and only a few ways to do it right. While there are some limited scenarios where it's the proper tool for the job, those are few and far between. And OOP is important. Start learning how to think that way now. When you're learning to be an architect, you don't start designing your first building to be built without hammers. Don't do the same when you're learning to be a developer.
I'm sorry, but this is tripe. If I had a dollar for every time somebody's told me that C is just an accident waiting to happen, I could retire right now and make my own video game. C, like any other language, is a tool. It's no more prone to "doing things wrong" than any other language, and BY FAR, the more important issue is the quality of the programmer. So much more, in fact, that I assert the language is largely irrelevant in the discussion. I'll take a great C programmer over a mediocre C++ (or any other language) programmer any day.
Furthermore, assuming C++ is where you're heading (which I think is a smart choice since almost all game development is done in C/C++ right now), I don't see a reason to not learn C since it is a subset of C++ anyway (IOW, you have to learn C to learn C++). But even more important is simply that C is so ubiquitous, that to not learn it for almost any CS field now, with the possible exception of exclusive front-end web development, would be a dubious decision. Let me just put it this way - I don't know a single C programmer right now that can't find a job, but I know plenty of ruby/php developers that are struggling, mainly because they are only able to do one thing. C proficiency will always be a valuable resource, at least for the foreseeable future.
Lastly, learning any language is valuable. The number one reason I like prospective applicants who have C experience is that the lower-level nature of the language requires you to understand (better) how the computer is actually working. Abstraction, as a concept, is a nice idea and has its place, but I want the people I'm working with to really know what's happening under the scenes, and I feel that C experience helps there.
So, in short: Learn C. You will almost certain use the knowledge, especially in game development, and it will make you a better programmer even if not (and you have to learn it to learn C++ anyway).
|
On November 17 2011 05:56 Lysenko wrote:Show nested quote +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. I'm a programmer and I missed that. Nice work!
|
Great blog :D Hope it gets a few more people into coding.
On December 03 2011 07:36 Fandango wrote:Show nested quote +On December 03 2011 07:27 CecilSunkure wrote:On December 03 2011 07:01 Fandango wrote:On December 03 2011 06:48 CecilSunkure wrote:On December 03 2011 06:32 Fandango wrote:On December 03 2011 05:46 CecilSunkure wrote: You actually do learn to code in Assembly here at DigiPen, in order to appreciate and understand C better. Then by extension, do the same with C to C++. It's fine if you disagree, though you're argument is kinda lacking against mine.
You haven't argued anything at all, you've literally just said that this is the way it is without any justification, I provided reasoning behind why that approach is flawed and you didn't refute any of it and again just assumed you're right. There's really no reason to continue to argue with you either because you seem to think you know everything about game development when you're still at college and apparently not that far along from your outlook. I'm not suggesting that my outlook is definitively the best or anything i'm just saying that your approach to learning is flawed because you don't really know what you're arguing. Sorry I should clarify. By "mine" I meant what I've been taught here. I'm merely quoting people more experienced that me that tell me these things. For example the guy in the podcast in the OP, he's a huge proponent of the philosophy I've cited. I understand what you are saying and why you are saying it, but I just disagree since I trust these people here more than you. Sorry for being a bit unclear on "the argument", as again it isn't mine, just one I trust. You should be aware that he's only referring to the studios that stick to the old model of physical media and consoles releases and so on, what i'm referring to is the other side of the industry that makes web games, mobile games (including but not limited to iPhone/Android) and other contracted works where ultra high performance is needed. It's a whole different kettle of fish and there's even parts of big studios that focus on small projects that operate in the same manner and hire the same people. You should always be wary of anyone telling you that the industry is like this or this, it's almost always all of the above it's just whoever is saying it hasn't necessarily been exposed to that side of things. I've worked at a big studio, ran a small studio that was based on contract work and been to quite a few developer conferences and depending on who you talk to, everyone is wrong and everyone is right. As a student you should just look what you want to do and go about doing that, for you it sounds like big studio development and you're on the right path for that so great. I'd also like to add that at no point am I condoning not learning anything you want to learn about just what is considered a requirement. Although i'd still skip C because it's not going to be relevant to anything but embedded systems programming and unless you want to work on robots or custom peripheral hardware it's probably a waste of time. edit: Listen to the dude above too he's a cool cat Yeah I understand. In the podcast he even himself says that if you're just interested in Flash development that strong foundation in C/C++ isn't really necessary. Nothing was said on mobile development though. From people I've heard talk it sounds like heavy optimization is important in mobile development as well due to limited hardware power. It's just a matter of goals of the target audience. Well the issue with mobile development for iPhone and Android (and I believe the old Samsung OS that failed), is that they don't allow you to program in C++ properly anyway, it's either Obj-C or Java. Optimising is far far far far far more down to code design than language speed anyway, compilers (including the JIT ones used in C# or Java) are very good at optimising these days. The biggest thing is always going to be how you've programmed it, removing unnecessary loops, avoiding costly operations and so on. Hardcore optimisations that rely on language speed differences or knowing how to use the different programming caches are like the last resort that rarely need to be done outside of engine development.
iOS developer here. The vast majority of time the biggest concern(at least for me) when you're optimizing your code for a mobile device is much more related to maximizing battery life than to "optimization" as we often think of it. A simple example: when you're using the phone's GPS for a location-based app it's very important to weigh the benefit of increasing the accuracy of your current measurement versus the cost of obtaining the measurement in terms of battery life. It is very easy to construct an app that will destroy battery life. It's definitely true that there are situations where you're constrained by hardware power and you have to keep that in mind, but I feel like much of that typically falls under the general category of programming well. Unless it involves significant obfuscation of your code one should be choosing a reasonably optimal solution.
Also, fuck objective c.
|
Just wanted to add my commendations to what you've done in this thread and with your life. Excellent job writing this up, and excellent job following your dreams and being an encouraging figure for young programmers. I'm on the management side of life, but I go downstairs when I can and look over the shoulders of the programmers we have at my office.
Cheers.
|
On December 03 2011 12:50 SCbiff wrote:Show nested quote +On December 03 2011 06:56 Bey wrote: Don't worry about C. There are a lot of things that are bad about C and a lot of practices you'll pick up from starting in C that'll you'll need to unlearn when you move on to more mature languages. There's a reason we don't write software using the same tools that were used in the 1970's and that's because there are a lot of better tools out there today.
Skip C. It's not like a prerequisite, like C is your 101 level class that you have to take before the 102 of C++. It's not like C is arithmetic and C++ is calculus. It's not part of some progression you need to follow. C is different. It's old. There are a lot of ways to do C wrong and only a few ways to do it right. While there are some limited scenarios where it's the proper tool for the job, those are few and far between. And OOP is important. Start learning how to think that way now. When you're learning to be an architect, you don't start designing your first building to be built without hammers. Don't do the same when you're learning to be a developer.
I'm sorry, but this is tripe. If I had a dollar for every time somebody's told me that C is just an accident waiting to happen, I could retire right now and make my own video game. C, like any other language, is a tool. It's no more prone to "doing things wrong" than any other language, and BY FAR, the more important issue is the quality of the programmer. So much more, in fact, that I assert the language is largely irrelevant in the discussion. I'll take a great C programmer over a mediocre C++ (or any other language) programmer any day. Furthermore, assuming C++ is where you're heading (which I think is a smart choice since almost all game development is done in C/C++ right now), I don't see a reason to not learn C since it is a subset of C++ anyway (IOW, you have to learn C to learn C++). But even more important is simply that C is so ubiquitous, that to not learn it for almost any CS field now, with the possible exception of exclusive front-end web development, would be a dubious decision. Let me just put it this way - I don't know a single C programmer right now that can't find a job, but I know plenty of ruby/php developers that are struggling, mainly because they are only able to do one thing. C proficiency will always be a valuable resource, at least for the foreseeable future. Lastly, learning any language is valuable. The number one reason I like prospective applicants who have C experience is that the lower-level nature of the language requires you to understand (better) how the computer is actually working. Abstraction, as a concept, is a nice idea and has its place, but I want the people I'm working with to really know what's happening under the scenes, and I feel that C experience helps there. So, in short: Learn C. You will almost certain use the knowledge, especially in game development, and it will make you a better programmer even if not (and you have to learn it to learn C++ anyway).
Yeah learning a language requiring explicit memory management will make you a better programmer regardless of whether it's C, C++ etc.
|
I'm a Compsci (game emphasis) major finishing my second semester of C++... And I have to say, C looks sort of crazy. Not looking forward to writing an operating system in it during my senior year. Also blows my mind that you could accomplish anything without objects. >_<
|
I am nearly done with my first semester for my game programming degree-thingy and I was told the opposite. Grades don't mean shit. IF you are good, you will be a great contribution to large teams. If you are bad, you can run the company to the ground basically. Due to the efficiency of code, ability to make it easy to understand and so on.
Since many people don't got any programming experience on the study, the first two semesters are basically learning math and programming with small game-related studies since we share class with general program-study and network security. Can't wait till next autumn, where we'll really start this up.
We'll be using Java for AI-programming for some reason,
As a small side-note, I can't wait to make my own game engine. My biggest dream is probably to work behind the game, adjusting, optimizing the engine people using (prefferably DICE, Valve or Blizzard).
|
On December 03 2011 19:32 hasuterrans wrote:Show nested quote +On December 03 2011 12:50 SCbiff wrote:On December 03 2011 06:56 Bey wrote: Don't worry about C. There are a lot of things that are bad about C and a lot of practices you'll pick up from starting in C that'll you'll need to unlearn when you move on to more mature languages. There's a reason we don't write software using the same tools that were used in the 1970's and that's because there are a lot of better tools out there today.
Skip C. It's not like a prerequisite, like C is your 101 level class that you have to take before the 102 of C++. It's not like C is arithmetic and C++ is calculus. It's not part of some progression you need to follow. C is different. It's old. There are a lot of ways to do C wrong and only a few ways to do it right. While there are some limited scenarios where it's the proper tool for the job, those are few and far between. And OOP is important. Start learning how to think that way now. When you're learning to be an architect, you don't start designing your first building to be built without hammers. Don't do the same when you're learning to be a developer.
I'm sorry, but this is tripe. If I had a dollar for every time somebody's told me that C is just an accident waiting to happen, I could retire right now and make my own video game. C, like any other language, is a tool. It's no more prone to "doing things wrong" than any other language, and BY FAR, the more important issue is the quality of the programmer. So much more, in fact, that I assert the language is largely irrelevant in the discussion. I'll take a great C programmer over a mediocre C++ (or any other language) programmer any day. Furthermore, assuming C++ is where you're heading (which I think is a smart choice since almost all game development is done in C/C++ right now), I don't see a reason to not learn C since it is a subset of C++ anyway (IOW, you have to learn C to learn C++). But even more important is simply that C is so ubiquitous, that to not learn it for almost any CS field now, with the possible exception of exclusive front-end web development, would be a dubious decision. Let me just put it this way - I don't know a single C programmer right now that can't find a job, but I know plenty of ruby/php developers that are struggling, mainly because they are only able to do one thing. C proficiency will always be a valuable resource, at least for the foreseeable future. Lastly, learning any language is valuable. The number one reason I like prospective applicants who have C experience is that the lower-level nature of the language requires you to understand (better) how the computer is actually working. Abstraction, as a concept, is a nice idea and has its place, but I want the people I'm working with to really know what's happening under the scenes, and I feel that C experience helps there. So, in short: Learn C. You will almost certain use the knowledge, especially in game development, and it will make you a better programmer even if not (and you have to learn it to learn C++ anyway). Yeah learning a language requiring explicit memory management will make you a better programmer regardless of whether it's C, C++ etc. That's a really diffuse comment. A better programmer in what way?
See, when programming in C# or Java, it's definitely not bad to know how memory works. That doesn't mean you have to have experience with explicit memory management. All you need to know is the worst case scenarios for the garbage collector and minimize those, and learning memory management in C or C++ doesn't help at all since it's a completely different system. Experience with explicit memory management will generally not give you any advantages when programming in languages with garbage collection since you aren't explicitly managing it anyway.
|
On December 03 2011 03:31 CecilSunkure wrote:Show nested quote +On December 02 2011 22:04 Slaytilost wrote:The reason I've chosen to focus on C is twofold: in the game industry 90% of video games are coded in C/C++. You might want to adjust that 90% of yours, or perhaps adjust your definition of game industry. Perhaps 90%-ish of games that are boxed and are for purchase in your local store, but remember that the game industry is much, much more then that. The mobile game industry is booming, and web-games have been around for a while too. They usually use higher level languages such as Java/C# or Actionscript, and iOS games are frequently built in Obj-C. In fact; i've been a professional game programmer for 3 years now, and i hardly know any C++, let alone objective C. But i still have collaborated on 3 titles that are currently available in the appstore. Since we use some amazing middleware (Unity) we can code comfy in our C# environment, even for Android and iOS. In short i'd like to say that the game industry is much broader then what people think. Its not only the starcrafts, modern warfares and battlefields. Its also Doodle Jump, Dora the Explorer and Hello Kitty online. I understand, but that's a pretty specialized area. You'd have immense trouble getting a job in a lot of other areas due to not knowing C++. Also the quote was actually loosely quoted from the podcast in the OP by one of the teachers here at DigiPen.
Specialized? I'd beg the differ, i'd say triple A studios are specialized. Just count the number of studios creating triple a titles, and the smaller studios that create other games, including but not limited to educational and serious games. There's only a very small portion of the whole industry actually working on triple A titles, and for good measure. Working at a triple a studio sucks, bigtime. Just ask any employee at such a studio (i know a couple), the work hours are terrible and crunchtime goes on continuously.
Immense trouble getting a job in other area's? Well, .NET developers and even sharepoint developers are in high demand if you are looking outside the game industry. Sure, if you want to work at a triple A studio a decent knowledge of hardcore game dev. concepts are needed, but you can get along well if you dont have that. Besides, a programming language is a tool to get the job done, its not that significant. Just about everything C++ can do C# can too, its the concepts and the maths that are hard to learn.
|
On December 03 2011 19:49 brain_ wrote: I'm a Compsci (game emphasis) major finishing my second semester of C++... And I have to say, C looks sort of crazy. Not looking forward to writing an operating system in it during my senior year. Also blows my mind that you could accomplish anything without objects. >_<
Interesting that you learned OOP before Structured Programming. Hopefully you will learn Functional programming (I did business instead of comp-sci so I don't know what the syllabus is), if structured programming will blow your mind, then functional programming will blow up your whole universe.
Quicksort in one line of Haskell
qsortOneLine xs = concat [qsortOneLine [y | y <- tail xs, y < x] ++ x : qsortOneLine [y | y <- tail xs, y >= x] | x <- take 1 xs]
|
Wow, I am always excited when I see new people getting into programming - especially with writing and communication skills like yours. If you keep at it, I am sure you will find a terrific job in the tech field.
Your story is very similar to mine when I started programming 10 years ago. I was in middle school and started programming in Blitz BASIC. It's a language that was relatively simple and offered some nice tools specifically for programming simple video games. I agree that C/C++ is probably the best language to learn and use at this point. Because it is so powerful, learning it will make most other languages seem easy. It will force you to manually perform memory management which is important to understand if you want to develop complex, yet efficient applications. I use C/C++ now working on software for embedded systems used in Routers and Switches and no other language would be possible in this situation. Its size and speed allow us to work in these limited environments.
I graduated from college with a degree in software engineering and I was easily able to find a great job right after graduating. It seems like software is one of the fields that is still relatively prosperous in this bad economy. So if you really enjoy this, and it seems you do, keep at it and I'm sure you won't regret it!
On November 17 2011 05:18 CecilSunkure wrote: 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.
I also have a little aside / advice. This type of thinking is very dangerous and will only prevent you from succeeding. You can control what you become and don't let anyone tell you other wise.
|
On December 03 2011 19:49 brain_ wrote: I'm a Compsci (game emphasis) major finishing my second semester of C++... And I have to say, C looks sort of crazy. Not looking forward to writing an operating system in it during my senior year. Also blows my mind that you could accomplish anything without objects. >_<
I highly recommend you check out the book Inside the C++ Object Model. Through it you can see how objects actually work and you should then be able to see how you can write object oriented code in C.
+ Show Spoiler + Basically you make structs with all your members in them. All of the methods on the object are free functions that take a pointer to the struct as their first member (this pointer). If you need virtual functions you store a pointer to a static function table in your struct and look up which function to call using that table. You can implement privates by putting them in the .c file and not exposing them to the header. You can have private members by having a private struct in the .c file which has the public struct from the .h file as its first member followed by the private members then mallocing this private struct and returning the pointer to the public struct. Then you can simply cast to the private type when you need access to the private members.
On December 03 2011 20:50 Tobberoth wrote:Show nested quote +On December 03 2011 19:32 hasuterrans wrote:On December 03 2011 12:50 SCbiff wrote:On December 03 2011 06:56 Bey wrote: Don't worry about C. There are a lot of things that are bad about C and a lot of practices you'll pick up from starting in C that'll you'll need to unlearn when you move on to more mature languages. There's a reason we don't write software using the same tools that were used in the 1970's and that's because there are a lot of better tools out there today.
Skip C. It's not like a prerequisite, like C is your 101 level class that you have to take before the 102 of C++. It's not like C is arithmetic and C++ is calculus. It's not part of some progression you need to follow. C is different. It's old. There are a lot of ways to do C wrong and only a few ways to do it right. While there are some limited scenarios where it's the proper tool for the job, those are few and far between. And OOP is important. Start learning how to think that way now. When you're learning to be an architect, you don't start designing your first building to be built without hammers. Don't do the same when you're learning to be a developer.
I'm sorry, but this is tripe. If I had a dollar for every time somebody's told me that C is just an accident waiting to happen, I could retire right now and make my own video game. C, like any other language, is a tool. It's no more prone to "doing things wrong" than any other language, and BY FAR, the more important issue is the quality of the programmer. So much more, in fact, that I assert the language is largely irrelevant in the discussion. I'll take a great C programmer over a mediocre C++ (or any other language) programmer any day. Furthermore, assuming C++ is where you're heading (which I think is a smart choice since almost all game development is done in C/C++ right now), I don't see a reason to not learn C since it is a subset of C++ anyway (IOW, you have to learn C to learn C++). But even more important is simply that C is so ubiquitous, that to not learn it for almost any CS field now, with the possible exception of exclusive front-end web development, would be a dubious decision. Let me just put it this way - I don't know a single C programmer right now that can't find a job, but I know plenty of ruby/php developers that are struggling, mainly because they are only able to do one thing. C proficiency will always be a valuable resource, at least for the foreseeable future. Lastly, learning any language is valuable. The number one reason I like prospective applicants who have C experience is that the lower-level nature of the language requires you to understand (better) how the computer is actually working. Abstraction, as a concept, is a nice idea and has its place, but I want the people I'm working with to really know what's happening under the scenes, and I feel that C experience helps there. So, in short: Learn C. You will almost certain use the knowledge, especially in game development, and it will make you a better programmer even if not (and you have to learn it to learn C++ anyway). Yeah learning a language requiring explicit memory management will make you a better programmer regardless of whether it's C, C++ etc. That's a really diffuse comment. A better programmer in what way? See, when programming in C# or Java, it's definitely not bad to know how memory works. That doesn't mean you have to have experience with explicit memory management. All you need to know is the worst case scenarios for the garbage collector and minimize those, and learning memory management in C or C++ doesn't help at all since it's a completely different system. Experience with explicit memory management will generally not give you any advantages when programming in languages with garbage collection since you aren't explicitly managing it anyway.
Garbage collection isn't a panacea. You can still have logical memory leaks. You still often have to explicitly manage your memory just with less control over the process.
A excerpt from Refactoring:
Optimizing a Payroll System Rich Garzaniti We had been developing Chrysler Comprehensive Compensation System for quite a while before we started to move it to GemStone. Naturally, when we did that, we found that the program wasn't fast enough. We brought in Jim Haungs, a master GemSmith, to help us optimize the system. After a little time with the team to learn how the system worked, Jim used GemStone's ProfMonitor feature to write a profiling tool that plugged into our functional tests. The tool displayed the numbers of objects that were being created and where they were being created. To our surprise, the biggest offender turned out to be the creation of strings. The biggest of the big was repeated creation of 12,000-byte strings. This was a particular problem because the string was so big that GemStone's usual garbage-collection facilities wouldn't deal with it. Because of the size, GemStone was paging the string to disk every time it was created. It turned out the strings were being built way down in our IO framework, and they were being built three at a time for every output record! Our first fix was to cache a single 12,000-byte string, which solved most of the problem. Later, we changed the framework to write directly to a file stream, which eliminated the creation of even the one string. Once the huge string was out of the way, Jim's profiler found similar problems with some smaller strings: 800 bytes, 500 bytes, and so on. Converting these to use the file stream facility solved them as well. With these techniques we steadily improved the performance of the system. During development it looked like it would take more than 1,000 hours to run the payroll. When we actually got ready to start, it took 40 hours. After a month we got it down to around 18; when we launched we were at 12. After a year of running and enhancing the system for a new group of employees, it was down to 9 hours. Our biggest improvement was to run the program in multiple threads on a multiprocessor machine. The system wasn't designed with threads in mind, but because it was so well factored, it took us only three days to run in multiple threads. Now the payroll takes a couple of hours to run. Before Jim provided a tool that measured the system in actual operation, we had good ideas about what was wrong. But it was a long time before our good ideas were the ones that needed to be implemented. The real measurements pointed in a different direction and made a much bigger difference.
|
On December 03 2011 22:29 Slaytilost wrote: Working at a triple a studio sucks, bigtime. Just ask any employee at such a studio (i know a couple), the work hours are terrible and crunchtime goes on continuously.
I work at a AAA studio, and this is not the case for me. We do have crunch (we are crunching right now in fact as we are getting close to shipping), but it's not that bad - I'm working ~50 hours per week. We will get a lot of this back in comp time once we are finished. I love working on big time games, so AAA studios are perfect for me. There are studios out there that crunch way too much, like Team Bondi did, but studios are starting to realize that too much crunch leads to burn out of your best talent, and that hurts you as a company.
You will be crunching in most studios, AAA or not. It's just a question of how much and what studios are trying to do to minimize it.
|
i'm studying mech engi right now and its really pissing me off , i dont like any of the courses, it feels like a grind everyday. now i'm considering switching to com sci or software engi, and hopefully make it into the multimedia industry and more specifically, game design. Thanks a lot for the information, do you know if the industry have any preferences between software engi or plain programmer? or can programmer be a software engi as well?
|
i writing some games for school and they are in XNA its so easy with that
|
On December 03 2011 23:33 sluggaslamoo wrote:Show nested quote +On December 03 2011 19:49 brain_ wrote: I'm a Compsci (game emphasis) major finishing my second semester of C++... And I have to say, C looks sort of crazy. Not looking forward to writing an operating system in it during my senior year. Also blows my mind that you could accomplish anything without objects. >_< Interesting that you learned OOP before Structured Programming. Hopefully you will learn Functional programming (I did business instead of comp-sci so I don't know what the syllabus is), if structured programming will blow your mind, then functional programming will blow up your whole universe. Quicksort in one line of Haskell qsortOneLine xs = concat [qsortOneLine [y | y <- tail xs, y < x] ++ x : qsortOneLine [y | y <- tail xs, y >= x] | x <- take 1 xs]
The first semester we didn't use objects, but all the projects/assignments were very small scale. And yes, I expect functional programming to be insane... Quicksort in one line? Seriously?
|
I don't know if anyone else has posted this link, but if you could edit it into the original post that would be lovely, not all of us are from the U.S!
For those of us in the UK, Train 2 Game train people for the games industry. Anyone can apply for this, qualifications or not, and go on a course in how to design or program games, how to become artists or animators for games.
They did a "Jam" last month, where teams of people on the course come together and get given tasks of games to make over the course of the weekend. The winners of last months Jam are currently doing placements at Epic Games.
|
Hmm
What do you think about using UDK and Unity3D and etc for games tho?
|
On December 03 2011 06:56 Bey wrote: C++ still gives you all the cool ways to shoot yourself in the foot and waste your weekends that C does. It has enough low-level power to prime you for that world but enough high-level expressiveness to get you used to working in that world as well. And if there ever comes a time when you need to fall back and learn C, your exposure to C++ is going to make that easy.
Ah I remember the subject I did in C, it was quite painful, probably in part because I found it hard to stay awake and alert during the lectures. The assignments specificially, I'm surprised I don't get nightmares about segmentation faults.
|
nice writeup
I knew my way around c, but haven't done anything for a few years now :S. I learned PHP for web related stuff, and Java for my uni stuff (currently taking a class where we're creating a compiler, doing it all in Java). I'm kind of sorry now for abandoning c, and I have never done anything in cpp. While I really do like Java, I have a strong feeling that my skills are deteriorating because Java is so forgivable compared to c :/.
Does anyone know of a good book/website/resource where I can find some good c++ problems arranged by difficulty, going from easy/intermediate to some more complex stuff? I'd really like to pick up on c++ in my spare time.
|
On December 02 2011 19:56 Tobberoth wrote:Show nested quote +On December 02 2011 19:33 Calvin[Deck] wrote:On December 02 2011 18:04 Osmoses wrote:Writing games in the windows console can be fun, but I don't think it teaches you very much about how to do anything else. Knowing memory management is well and good, but modern coding is all about abstraction. I hardly think building a new game engine from scratch is common practice anywhere these days. Why reinvent the wheel when you can just build onto an existing, proven library? As has been already said, game designing is a collaborative effort outside indie studios, and you generally have very little influence yourself. And if you want to make your game, you can't spend your time writing low level memory management code, you'll never see anything close to a finished product. Swallow your pride and use someone else's code, use an API or a finished engine. Your game doesn't need to be cutting edge, minecraft looks like shit but it's still a great game. If you want to make a game and see some real results before you die, try Cocos2D. There are 3D APIs as well, but I haven't tried any. On December 02 2011 17:59 skipgamer wrote: I like this blog post, except for the word hobbyist in the first sentence...
A beginner hobbyist game programmer should not bother learning C, it is not worth the time, and I'd be surprised to hear a professional recommend it either. Better off focusing on learning a language/engine/SDK that has the tools and meets the requirements of whatever type of game you're trying to make.
Sure it may not exactly be "programming" in the eyes of professionals, but there is a big difference between wanting to be a professional game programmer, and wanting to make games as a hobby. You can (and have to) get your hands dirty with coding regardless of what language/engine/SDK you choose if you are going it alone.
6 years as a hobbyist programmer/game developer with the UT2k4 engine (unrealscript), Source engine(c++), Java, Actionscript and the UnrealEngine(unrealscript+actionscript) have taught me this.
If I started by learning C, I wouldn't have had anywhere near the amount of experience I've had... That being said, I've never actually taken a project to completion (the most I could say I have created is a proof of concept), but that's what being a hobbyist is all about right? It's the journey, not the destination. Lol you beat me to it :p I am a professional programmer, and i have the complete opposite opinion. You have to start with the complete basic to get really good at something. If you use flash+actionscript, or some other tool/API, yes you can have a lot if fun, and you will get faster to doing something. But then you will hit a wall, where you want to do something that the tool does not easily provide. And by that point you will need the basic skills of programming, to extend the API you are using, instead of being limited by it. I am not saying that you should not use some high level API, but eventually you need to get into really nasty technical details about some technology, if you have some need in your game, that are pushing the technology a bit. That is why making simple games in ASCII art can improve your skills in programming a lot. While it's true that using extremely top-level stuff will leave you wanting eventually, I disagree that you have to start from the basics to remedy that. Say you're working with Flash and you're making a game. You make a game or two then come up with a great idea which you feel flash is inadequate for. That's the perfect time to go basic, you have experience making games in Flash, so you need to learn what you feel is appropriate. I wouldn't expect someone to jump from making a flash game to making a C++ game, but I would think someone would have more motivation. Learning how to program is, at least IMO, not all that hard. Learning how to properly program a game, an enginge etc, is harder. If you know how to program in python, learning to program in C is not that bad and you will be motivated since you decided to learn C for a good reason, instead of motivating it by "it being basic". I would personally recommend people to start using either C and SDL to make oldschool games were you have a ton of freedom, or XNA to make windows/xbox games. Both give you perfect freedom to make the games you want, yet give you the tools needed to not get stuck, such as audio and graphic frameworks.
It properly also depends on what trigger your interest, if it is the overall game design, or the nitty gritty technical stuff.
There is no reason to do something that is not fun, but if you want to get really good at it fast, i think you need to learn C and basic machine knowledge first.
|
On December 02 2011 20:12 skipgamer wrote:Show nested quote +On December 02 2011 19:33 Calvin[Deck] wrote:On December 02 2011 18:04 Osmoses wrote:Writing games in the windows console can be fun, but I don't think it teaches you very much about how to do anything else. Knowing memory management is well and good, but modern coding is all about abstraction. I hardly think building a new game engine from scratch is common practice anywhere these days. Why reinvent the wheel when you can just build onto an existing, proven library? As has been already said, game designing is a collaborative effort outside indie studios, and you generally have very little influence yourself. And if you want to make your game, you can't spend your time writing low level memory management code, you'll never see anything close to a finished product. Swallow your pride and use someone else's code, use an API or a finished engine. Your game doesn't need to be cutting edge, minecraft looks like shit but it's still a great game. If you want to make a game and see some real results before you die, try Cocos2D. There are 3D APIs as well, but I haven't tried any. On December 02 2011 17:59 skipgamer wrote: I like this blog post, except for the word hobbyist in the first sentence...
A beginner hobbyist game programmer should not bother learning C, it is not worth the time, and I'd be surprised to hear a professional recommend it either. Better off focusing on learning a language/engine/SDK that has the tools and meets the requirements of whatever type of game you're trying to make.
Sure it may not exactly be "programming" in the eyes of professionals, but there is a big difference between wanting to be a professional game programmer, and wanting to make games as a hobby. You can (and have to) get your hands dirty with coding regardless of what language/engine/SDK you choose if you are going it alone.
6 years as a hobbyist programmer/game developer with the UT2k4 engine (unrealscript), Source engine(c++), Java, Actionscript and the UnrealEngine(unrealscript+actionscript) have taught me this.
If I started by learning C, I wouldn't have had anywhere near the amount of experience I've had... That being said, I've never actually taken a project to completion (the most I could say I have created is a proof of concept), but that's what being a hobbyist is all about right? It's the journey, not the destination. Lol you beat me to it :p I am a professional programmer, and i have the complete opposite opinion. You have to start with the complete basic to get really good at something. If you use flash+actionscript, or some other tool/API, yes you can have a lot if fun, and you will get faster to doing something. But then you will hit a wall, where you want to do something that the tool does not easily provide. And by that point you will need the basic skills of programming, to extend the API you are using, instead of being limited by it. I am not saying that you should not use some high level API, but eventually you need to get into really nasty technical details about some technology, if you have some need in your game, that are pushing the technology a bit. That is why making simple games in ASCII art can improve your skills in programming a lot. I don't mean to disagree with you, I'm just interested, don't you think it's appropriate at that point, when you hit that wall, to go out and learn how to get past that wall? edit: had a big long rant here but I deleted it, because it was just that.
Sure, but sometimes that is very hard, if you need to learn some some basic stuff first.
But you are right, sometimes when i hit a wall, i have to solve it by reading a book, or taking a class.
|
I just know a little bit of Java now but I will learn c/c++ next year. I'm also decent when it comes to 3D in Maya. I still have a long way to go and a lot of work ahead of me before I'm good enough to work with creating games though. Good thing they teach me this in school.
|
On December 04 2011 17:52 zhurai wrote: Hmm
What do you think about using UDK and Unity3D and etc for games tho? As a hobby, or designer, great. As a professional programmer, not very great.
|
I didn't see this linked anywhere, but this guy has some sound advice about the games industry (more specifically for game designers not necessaraily programmers). Good luck!
http://www.sloperama.com/advice.html
Also gamedev.net is a great resource with many intelligent people from inside the industry that post there.
Edit: Note that some of these articles were written years ago, but on the whole what he is talking about is still valid.
|
Great effort, I'm sure a lot of aspiring programmers will learn a lot! I have a Computer Science degree, and I work in an IT firm (though I don't do a whole lot of programming there). I did however do quite a bit of programming during my studies, but I've never tried game programming. Do you have any good recommendations for blogs/resources for people that are comfortable with programming, but have no game experience?
|
For programmers i recommend looking up lectures from other universities, for example standford has great lectures on ios development, and an awesome lecture on optimising for openGL by some dude form mgmoco
|
On December 05 2011 06:57 CecilSunkure wrote:Show nested quote +On December 04 2011 17:52 zhurai wrote: Hmm
What do you think about using UDK and Unity3D and etc for games tho? As a hobby, or designer, great. As a professional programmer, not very great. What? Especially Unity3D is quite popular in the "Small Games Business" and UDK is a powerful tool for the Unreal Engine 3 that is used by many big titles and companies such as Ubisoft, EA, DICE, Disney, Sega...
There's still a lot of programming to do even though I agree that both kits take a lot of work away from you. While both have some handy "oneclick-functions" they are just frameworks.
|
On December 05 2011 19:01 MrShankly wrote: For programmers i recommend looking up lectures from other universities, for example standford has great lectures on ios development, and an awesome lecture on optimising for openGL by some dude form mgmoco
Also if I'm not mistaken, MIT puts all their lectures online as well. Also MIT has a system called opencoursecode, where they put everything they did that semester online like lectures, exams, assignments, etc. Definitely worth while if you want to get into programming. My teacher here in canada told me about it.
|
So basically you're just telling people that they need to learn to program, because this article has next to nothing about actually creating a game in the actual industry.
|
On December 06 2011 02:00 Gnaix wrote: So basically you're just telling people that they need to learn to program, because this article has next to nothing about actually creating a game in the actual industry. I didn't say anything about that, because it's not about that...
|
|
If there is anything I learned from game programming it is mostly self taught. If you know where to look you probably don't even need to take classes on it. At least that is how I reflect back on it, but a good place to start if you are using XNA through C# is http://www.riemers.net/
|
On December 02 2011 17:16 Hairy wrote:I went into programming, and was in the games industry for a whopping 18 months. My advice personally to anyone wanting to become a "game designer" is... to stop. Most games DESIGN degrees are actually a sham, and are not teaching the skills that games development studios actually want - make sure your degree course is not one of those. And do you actually know what a game DESIGN job is? How does the menu flow work? What menus will there be? What button presses do what? What button hints will we show on the screen? What happens when we press those buttons? What happens if he presses different buttons? What help text should we display? When should that help text appear? Will that help text have a delay in appearing? How big should that delay be? Will that help text work ok in different languages? Are any of the game UI elements too close to the edge of the screen? (nintendo enforced) Game DESIGN involves solving ALL those questions, and thousands and thousands more, and extensively documenting it. You don't do the art - the art is done by artists. You don't actually make it happen, as that is done by the programmers. You don't think of and make the cool sounds or music, as that is done by the music guys. Your job is to write a document. Every_SINGLE_DETAIL of how EVERYTHING works must be documented exactly. That is what game design is. Very little of it is thinking up what cool weapons you use etc. In fact, you'll be lucky if you have much choice in the matter - a lot of the time you'll be designing a game that fits what the publisher needs/wants (the publisher is the company funding the work on your game), and you will have a strict budget you need to stick to (cool ideas usually take time (and therefore money) to implement). I would also warn that I don't think you'll ever get a job out of university with a game 'designer' degree. Very small indie games companies require someone else already in the team (a programmer/artist) to take on the responsibilities of that role - they can't afford to pay someone just to design. Big companies have the money to hire someone with proven skill and experience, OR they can take someone from their team that they know and trust and have them do the role instead. Why would you hire someone fresh out of university, with no experience or proven track record to do one of the most important jobs? If you want in the games industry, don't aim for games design. Do music, or art, or programming (incidentally, do C++, not C). You can move onto games designer later after you've gained experience in the industry. Show nested quote +On November 20 2011 06:54 Inori wrote: Recently I keep hearing from various sources that game dev is worst position a programmer can go to in terms of work stress. You're forced to work hard for months, constantly doing overtime (even unpaid) because of deadlines and etc. Then you finish it, have a little party and the cycle begins again with next title.
Is this in any way true? Yes. Overtime is almost always unpaid, and it is expected. It is not constant, but you WILL have to do overtime. At my job I did 4 weeks where I was in the office will 9 - 10pm at night, and I didn't see a penny of extra cash. You are constantly working towards the next deadline, and often it is a pretty intense working environment. I don't intend to dissuade people TOO much - there IS still fun to be had. But, realistically, only go into it if you absolutely adore MAKING games (making is very different from playing), and you intend to put in the work required. Only the most dedicated are going to actually make it into the industry, and only the most passionate of those are going to stay there. The games industry is incredibly competitive, so you need to be fantastic. Go and learn some programming like in the opening post in your free time. Go and learn MORE programming. Do projects off your own back, in your own time. If this is sounding too much like hard work... it probably is. Because there are people out there who have the passion to spend almost all of their free time just programming, improving their craft, and practicing to get better. If you can't be at least as good as them you're going to find it difficult. Become a hobbyist game programmer, and if you still ADORE it then go for it. If you just like games, and think working on games will be cool... you need to rethink.
DISCLAIMER: This is all my own personal opinion from my experience as a game designer.
I feel this is pretty close to true and overall a great and informative post, but perhaps a bit too depressing. I agree that you should be wary of those degrees that claim to teach you game design, but I also know that there are some legitimate universities out there offering game design courses. Game Design in and of itself is not necessarily well-defined, and isn't really something you can just learn like programming. It takes a wealth of knowledge from a variety of experiences. You're not calculating an algorithm to run a physics engine as optimally as possible, you're crafting a world that your player will experience.
A game designer's job almost certainly demands tasks like designing menus, buttons, flows, UX flows, and writing tons of detailed docuemnts. However the idea that it is the only thing a game designer does is a bit over the top. This may be true at large game studios, where they hire individuals to work on one specific aspect, but that's only one discipline of game design. The really cool decisions in large companies are often decided by the senior designers. There is also level design, system/mechanics design (combat, experience, multiplayer etc), narrative design, and a slew of other items. Sure you may have an individual who is dedicated to that, but it's the same as having a network programmer vs a physics programmer. They're still game programmers.
If you want to be a game designer I think the best situation to find yourself in early-on is to find a small company to start with. This will offer you the broadest range of skills you will have to develop to be successful. As a game designer at a small company where the development team is 9 people, my job entails level design, system design, QA testing, community management, UI design, UX design, and even some project management. Sometimes I will spend a day designing a new mission for a quest, which maybe include level design, narrative writing, and tutorials. Other times I will be designing a new game mechanic and how it will fit into every other system we have in the game. And there are certainly days where I just interact with the community, receive feedback, criticism, questions, or just play some games.
To be a game designer? There is no set path at the moment. Just teaming up with one or two others and designing games simply for your portfolio is a great idea. You will learn a lot through trial and error, figuring out what works and what doesn't. ALWAYS ask for feedback and be open to criticism -- you are not designing a game just for you to play, but for your audience. As previously mentioned, starting in another discipline like programming can be another gate. You really just have to find and jump at every opportunity.
I personally went to school and graduated with a bachelor's in computer science. My last semester I landed an internship at a new game company one of my good friends was the lead flash programmer for. They had me doing boring, menial tasks at first that slowly expanded. By the end of my internship they liked my work and offered me a job. They said they could not guarantee job security or a lot of pay, since it all depends on the success of the product. EXPECT THIS. Games are not always successful! Plenty of game developers come and go and success is gained and lost. As a side note, I have also not done ANY programming since graduating -- I love game design and fully intend to stay focused in this field.
As for skills I believe are very important as a game designer:
-Write. It is important that you can write, and write well! Other members of your team will be using your documents as their starting point for their work. Which leads to the next point...
-Communication. You MUST be able to communicate your ideas to each different team in your company (programming, art, producers, sound). Each discipline has different ideas, different approaches, it's up to you as the game design to bring it all together.
-Humility. Everyone's opinion matters in way or another. I'm not saying cave-in to every suggestion that is thrown at you, but be sure to really understand and see what they are trying to say. This leads to playtesting and criticism, THESE ARE EXTREMELY IMPORTANT. Iteration cannot be stressed enough.
-Experience. You really can't do much about this one, but experience is key. The more you design, the more you will learn what works and what doesn't. You can learn a LOT from an experienced designer, since they can help to warn you about pitfalls they've already had. Also, you are crafting an experience for your audience. Use what you know to nail this right. Experience will expand your knowledge.
-Any knowledge of any other game developing discipline. It helps to be able to cater your designs with your programmers, art team, sound team, or any other fellow coworker in mind. Now I'm not saying you go around telling your programmer exactly how the physics should be implemented, but it does help for me to know that asking the programmer implement friction and momentum would be quite a chunk of time.
My list is clearly not the end-all, be-all, and I am also not someone who claims to have all knowledge of everything game design. This is my own personal opinion from my time in the games industry as a designer (~2 years). I hope my wall of text was informative and gives you an idea of the work a game designer may do!
|
Great post, really interesting stuff!
|
I'm currently doing a game technology study, we're using C# with the XNA game engine, I'm wondering if it could become a standard in the game industry.
|
You are the man Programmed a bit a few years back and this seems nice to get me motivated and back on track. Thanks!
|
On December 07 2011 05:06 gotMilkshake wrote:You are the man Programmed a bit a few years back and this seems nice to get me motivated and back on track. Thanks! Great! Exactly the type of reason I wrote it in the first place.
On December 06 2011 16:14 Bunkerr wrote: Great post, really interesting stuff! Wonderful to hear!
|
|
really good read there was a time when i was really interesting in becoming a programmer but its just way over my head... i just cannot deal with such complicated math
|
Junior game programmer here. I started programming and game making about 12 years ago as a hobby. First using RPG Makers and VB in high school, after graduation I taught myself the basics of C++ and managed to create some games/apps. Couple years past and I managed to get into a Game Dev program at a local college. Which is an eye-opener in itself, infinite amounts of work with little time and sometimes with groups that won't function together. I had the impression that many students felt that if they graduated with minimal effort they would be guaranteed a job. These game dev programs teach many useful skills, but you can't rely on a school program alone, you have to work on projects and your ideas on your own time, constantly improving your skills. And not for the sake of graduating or getting a job later, but because you want to, you love to code/draw and want to improve your skills. Needless to say, more than half of the students that I started with, either failed or dropped out... And half of the students that did graduate, actually got jobs that I know of. I graduated this spring, and started my brutal search for a game programming related job. About 5 months later, I was offered a position at a local start-up company.
Programming is just one slice of the game development pie, and just because you know how to program, doesn't mean you know how to make games. A programmer writes code, not "make games". There are many aspects of game design, understanding the psychology of the player and what incentives drive the player are also important. I would also say that most games have more artists than programmers on staff. Deciding where you fit and pushing your skills to the limit is what you have to do to get recognized. Great games are made with great teams. Thus, inter-personal skills are also important, no one wants to hire you if you can't work along with anyone.
I would never imagine I would be a programmer if you asked me 10 years ago. I'm not even a math genius, I failed grade 10 math when I was a teen and had to take it over in summer school. My point is, do what you love and keep at it, and you'll get where you want to be. Be persistent and never give up.
Anyway enough jibber jabber, got to get back to work :S
|
This is awesome. I commend you for recommending C and C++. An ex-friend of mine thinks Python is the be-all end-all programming language for everything, but it is a hell of a lot slower than C which makes a difference for something potentially huge like a game.
I haven't programmed any games, but I've done some of the SDL tutorials on an SDL tutorial website. My programming experience is mostly making web pages. Which I know doesn't really count as programming until you get into things like javascript and php.
But making games is one of my dreams in life. Just because I have amazing game ideas that I want to bring to life.
One of the things I've realized is that just programming for the sake of programming bores me. The thrill I get out of programming is the same thrill that an artist gets out of drawing: Coming up with an amazing idea and bringing it to life.
|
@CecilSunkure Some advice from a fellow DP-Sg student On http://cecilsunkure.blogspot.com/2011/12/windows-console-game-painters-algorithm.html, whats that pile of hardcoded garbage? I hope you're not putting that into your game. Write a .bmp image importer, and never put that huge array(and in fact any hardcoded stuff) in any source code again.
And don't hardcode 255 as 'transparency'. Maintain a frame buffer with depth buffer values, or do z-ordering per image. Avoid such hardcoding especially in the early stages of your development.
Plus, I'm surprised you have the time to blog given DP's unforgiving schedule. You'll find yourself watching less starcraft as time goes on.
|
For learning purposes it's perfectly fine, even though the next step should always be how to avoid that.
|
On December 08 2011 22:34 ddengster wrote:@CecilSunkure Some advice from a fellow DP-Sg student On http://cecilsunkure.blogspot.com/2011/12/windows-console-game-painters-algorithm.html, whats that pile of hardcoded garbage? I hope you're not putting that into your game. Write a .bmp image importer, and never put that huge array(and in fact any hardcoded stuff) in any source code again. And don't hardcode 255 as 'transparency'. Maintain a frame buffer with depth buffer values, or do z-ordering per image. Avoid such hardcoding especially in the early stages of your development. Plus, I'm surprised you have the time to blog given DP's unforgiving schedule. You'll find yourself watching less starcraft as time goes on.
Writing this in to a bitmap and then decoding it would be an enormous hassle because bitmap encoding applications I've seen don't support CHAR_INFO stuff. Unless I'm missing something, you'd end up probably having to build a bunch of meta-data and analysis to transform the bitmap to the desired CHAR_INFO struct. What he should do is put it in a source file and load it (which maybe is a long-term plan).
Considering his game is a console app and must be written specifically to do console stuff, I'm pretty sure that any type of abstraction he does is going to just make life more miserable for him with absolutely no value later-on. There aren't really translatable concepts in a cruddy win32 console window that will easily move over to a Win32 non-console app. He'll have to do plenty of hacks just to get everything working. While learning, adding something like a generic rendering subsystem just adds complexity where you don't need it to a system that will never use it.
Besides, going through the pain of taking something from Win32Console -> Generic Console (for example) at least once is probably good because it'll help you understand how to better build a generic console abstraction. When you have a good understanding of what the differences are then you will have an easier time of visualizing where you need abstraction and where it's unnecessary.
|
On December 09 2011 00:12 ShadowWolf wrote:Show nested quote +On December 08 2011 22:34 ddengster wrote:@CecilSunkure Some advice from a fellow DP-Sg student On http://cecilsunkure.blogspot.com/2011/12/windows-console-game-painters-algorithm.html, whats that pile of hardcoded garbage? I hope you're not putting that into your game. Write a .bmp image importer, and never put that huge array(and in fact any hardcoded stuff) in any source code again. And don't hardcode 255 as 'transparency'. Maintain a frame buffer with depth buffer values, or do z-ordering per image. Avoid such hardcoding especially in the early stages of your development. Plus, I'm surprised you have the time to blog given DP's unforgiving schedule. You'll find yourself watching less starcraft as time goes on. Writing this in to a bitmap and then decoding it would be an enormous hassle because bitmap encoding applications I've seen don't support CHAR_INFO stuff. Unless I'm missing something, you'd end up probably having to build a bunch of meta-data and analysis to transform the bitmap to the desired CHAR_INFO struct. What he should do is put it in a source file and load it (which maybe is a long-term plan). Considering his game is a console app and must be written specifically to do console stuff, I'm pretty sure that any type of abstraction he does is going to just make life more miserable for him with absolutely no value later-on. There aren't really translatable concepts in a cruddy win32 console window that will easily move over to a Win32 non-console app. He'll have to do plenty of hacks just to get everything working. While learning, adding something like a generic rendering subsystem just adds complexity where you don't need it to a system that will never use it. Besides, going through the pain of taking something from Win32Console -> Generic Console (for example) at least once is probably good because it'll help you understand how to better build a generic console abstraction. When you have a good understanding of what the differences are then you will have an easier time of visualizing where you need abstraction and where it's unnecessary.
It might be a bit daunting at first, but the rewards justify the cost. It's much, much easier to open a picture-editing program like photoshop/gimp/etc and edit the correct color values, save the file and load it into the game. Compare that to putting lots of 255s and color values into hardcoded arrays. You'll be wasting more time doing these kinds of stuff than actually learning things like how file formats are stored, etc. No to mention that if you have to change image sizes and so on, you'll have to maintain the array to make sure crashes don't happen.
http://en.wikipedia.org/wiki/BMP_file_format details the bmp file format image. It's probably one of the easier file formats to decode, and I'm sure that you can google for code on decoding such stuff. Basically, you try to strip away all the headers and excess information, leaving the RGB values that you can store.
Many programmers copy paste code. Don't be one of them. Make sure you understand what the code is actually doing.
|
On December 08 2011 22:34 ddengster wrote:@CecilSunkure Some advice from a fellow DP-Sg student On http://cecilsunkure.blogspot.com/2011/12/windows-console-game-painters-algorithm.html, whats that pile of hardcoded garbage? I hope you're not putting that into your game. Write a .bmp image importer, and never put that huge array(and in fact any hardcoded stuff) in any source code again. And don't hardcode 255 as 'transparency'. Maintain a frame buffer with depth buffer values, or do z-ordering per image. Avoid such hardcoding especially in the early stages of your development. Plus, I'm surprised you have the time to blog given DP's unforgiving schedule. You'll find yourself watching less starcraft as time goes on. That's all out of the scope of a freshman first-semester game and pretty pointless. If my grade depends on my freshmen game being playable with a certain amount of content, a BMP parser and proper image rendering isn't going to help. Plus, we wrote tools to manipulate large arrays of characters and didn't "waste time" doing it by hand.
If you have proper time management you can do a lot of things while attending DigiPen.
|
Programmer for 25 years here.
I would suggest reading Andre La'Mothe's books on game programming. He's an entertaining read, and you can learn a lot of the basics from him.
|
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 Procedural and Java is Object-Oriented. What you may have heard is C# is similar to Java. Basically, C# is Microsoft's Windows-proprietary version of Java. They copied Java almost exactly, with the obvious difference being some syntax and the .NET libraries.
|
So has anyone worked on anything? Would be extremely cool to see some ASCII projects. I'd like to post mine from first semester though I have to wait for cert from school before doing so (legal protection).
|
|
|
|